Я не уверен, является ли это проблемой сервера, или я не понимаю, как на самом деле работает HTTP-кэширование.
У меня есть приложение ASP MVC, работающее на IIS7.На сайте много статического контента, в том числе CSS, Javascript и файлы изображений.
Для этих файлов я хочу, чтобы браузер кэшировал их как минимум на день - наши .css, .js,Файлы .gif и .png редко изменяются.
Мой файл web.config выглядит следующим образом:
<system.webServer>
<staticContent>
<clientCache cacheControlMode="UseMaxAge"
cacheControlMaxAge="1.00:00:00" />
</staticContent>
</system.webServer>
Проблема, с которой я сталкиваюсь, заключается в том, что браузер (проверенный Chrome, IE8 и FX)кажется, не кэширует файлы, как я ожидал.У меня есть настройки по умолчанию (проверять наличие новых страниц автоматически в IE).
При первом посещении загрузка контента происходит, как и ожидалось
HTTP/1.1 200 OK
Cache-Control: max-age=86400
Content-Type: image/gif
Last-Modified: Fri, 07 Aug 2009 09:55:15 GMT
Accept-Ranges: bytes
ETag: "3efeb2294517ca1:0"
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Mon, 07 Jun 2010 14:29:16 GMT
Content-Length: 918
<content>
Я думаю, что Cache-Control: max-age=86400
должен сообщитьбраузеру не запрашивать страницу снова в течение дня.
Хорошо, теперь страница перезагружается, и браузер снова запрашивает изображение.На этот раз он получает пустой ответ с этими заголовками:
HTTP/1.1 304 Not Modified
Cache-Control: max-age=86400
Last-Modified: Fri, 07 Aug 2009 09:55:15 GMT
Accept-Ranges: bytes
ETag: "3efeb2294517ca1:0"
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Mon, 07 Jun 2010 14:30:32 GMT
Таким образом, похоже, что браузер отправил ETag
назад (в качестве уникального идентификатора для ресурса), и сервер вернулся с 304 Не изменено - сообщает браузеру, что он может использовать ранее загруженный файл.
Мне кажется, что это будет правильным для многих ситуаций кэширования, но здесь я не хочу дополнительногопоездка туда и обратно.Мне все равно, устареет ли изображение при изменении файла на сервере.
Этих файлов много (даже со спрайт-картами и т. П.), И у многих наших клиентов оченьмедленные сети.Каждое обратное соединение для проверки связи для этого статуса 304 занимает от 10 до 5 секунды.У многих также есть IE6, который имеет только 2 HTTP-соединения одновременно.В результате наше приложение работает очень медленно для этих клиентов, и каждой странице требуется дополнительная пара секунд, чтобы проверить, не изменился ли статический контент.
Какой заголовок ответа мне не хватает, который может вызватьбраузер для агрессивного кэширования файлов?
Как бы установить это в .Net web.config для IIS7?
Не понимаю ли я, как вообще работает HTTP-кэширование?