Кэширование вывода все еще добавляет Cache-Control: no-cache, даже если он отключен - PullRequest
10 голосов
/ 17 ноября 2010

Фон

Клиент запускает наше веб-приложение. через HTTPS и сталкиваются с (довольно хорошо известной) ошибкой IE8 «файл не может быть записан в кэш» при попытке просмотреть файл PDF / Excel / word, поскольку ответ содержит директиву HTTP Cache-Control:no-cache. Дело в том, что не наше приложение (или его конфигурация) добавляет эту директиву.

После небольшого исследования я обнаружил, что функция кэширования вывода страницы IIS7 также может добавить этот заголовок, например

<caching enabled="false" enableKernelCache="false">
    <profiles>
        <add extension=".htm" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" />
    </profiles> 
</caching>

будет иметь эффект добавления Cache-Control:no-cache, private к заголовкам ответа.

Мой вопрос

Но удивительным (IMO) является то, что даже когда вы предположительно отключаете функцию (см. Выше в моем фрагменте конфигурации enabled="false"), заголовки ответа все еще отправляются с Cache-Control:no-cache, private.

Глупо ли я удивляться этому (наверное, я так думаю)?

Ответы [ 4 ]

8 голосов
/ 25 августа 2014

Что фактически избавило меня от no-cache, так это добавление location="Any" к элементу add, который вместо этого пишет Cache-Control:public:

<caching enabled="false" enableKernelCache="false">
    <profiles>
        <add extension=".htm" ... location="Any" />
    </profiles> 
</caching>

В отсутствие атрибута location IIS по умолчанию равен Cache-Control:no-cache. Другие возможные значения: Client, Downstream, Server или ServerAndClient. Подробности здесь .

5 голосов
/ 31 марта 2011

Ты не одинок: http://forums.iis.net/t/1152306.aspx

У нас тоже была такая же проблема. Я не нашел никакой документации об этой «функции», поэтому я предполагаю, что это ошибка.

Мы решили просто удалить тег кэширования и использовать вместо него только тег clientCache.

4 голосов
/ 24 июля 2013

Удалить "." в атрибуте расширения:

<profiles>
    <add extension="htm" policy="CacheUntilChange" kernelCachePolicy="CacheUntilChange" />
</profiles>
0 голосов
/ 29 декабря 2013

Попробуйте добавить это в ваш web.config, он полностью удалил заголовок Cache-Control для меня:

<system.Webserver>
<staticContent>
<clientCache cacheControlMode="NoControl" />
</staticContent>
</system.Webserver>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...