Я не уверен, является ли это проблемой сервера, или я не понимаю, как работает HTTP-кеширование.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 Not Modified - указание браузеру, что он может использовать ранее загруженный файл.
Мне кажется, что это будет правильно для многих ситуаций кеширования, но здесь я не хочу дополнительного кругового путешествия. Мне все равно, если изображение устареет, когда файл на сервере изменится.
Есть много таких файлов (даже с картами спрайтов и т. П.), И многие из наших клиентов имеют очень медленные сети. Каждый раунд до пинга для этого статус занимает от 10-го до 5-го числа. У многих также есть IE6, у которого есть только 2 HTTP-соединения за раз. Конечным результатом является то, что наше приложение выглядит очень медленным для этих клиентов, и каждая страница занимает дополнительные пару секунд, чтобы проверить, что статический контент не изменился.
Какой ответный заголовок мне не хватает, что заставит браузер агрессивно кэшировать файлы?
Как бы установить это в .Net web.config для IIS7?
Я не понимаю, как работает HTTP-кеширование?
Вы можете отключить ETag? Это может вас исправить, но я не уверен. –
Я попытаюсь удалить ETag, но для моего тестового сервера это похоже на совпадение – Keith
Если вы нажмете обновление или F5, браузер всегда будет запрашивать сервер (возможно, условный запрос) независимо от настроек кэша –