При каких обстоятельствах заголовки Expires, Last-Modified и ETags могут игнорироваться? - PullRequest
3 голосов
/ 07 декабря 2011

У меня есть веб-сайт, который получает много неожиданных запросов на статические ресурсы (изображения, файлы CSS и т. Д.), Которые, как я ожидаю, будут обслуживаться прямо из кэша браузера.Это проблема производительности, и я не могу понять, почему это происходит.

Для каждого статического ресурса веб-сайт возвращает заголовок Expires на 24 часа в будущем, заголовок Last-Modified датымодификации файла image / css и ETag:

Expires: Wed, 07 Dec 2011 13:50:47 GMT
Last-Modified: Thu, 14 Jul 2011 15:19:16 GMT
ETag: W/"4875-1310656756000"

С этими настройками можно ожидать, что после того, как браузер впервые запросит файл изображения или css:

  • он не будет повторно запрашивать ресурс в течение еще 24 часов
  • через 24 часа он будет повторно запрашивать ресурс, передавая заголовок If-Modified-Since и заголовок If-None-Match, к которому серверответил бы со статусом 304 (при условии, что ничего не изменилось на стороне сервера).

Это то, что происходит большую часть времени.

Однако я вижу некоторые сеансы браузера, в которых статические ресурсы не кэшируются и запрашиваются для каждой страницы .

Глядя на эти запросы, я не вижу ни одного получаемого If-Modified-Since или If-None-Match заголовка.Затем сервер каждый раз отвечает статусом 200 и возвращает запрошенный ресурс.Это проблема с производительностью, которую я хочу отследить.

Я подозреваю, что проблема связана с наличием HTTP-прокси / кэша между браузером и веб-сайтом (проблемные сеансы обычно происходят из-за корпоративных брандмауэров).Если это так, я не понимаю, почему прокси-сервер так мешает заголовкам Expires / Etag / Last-Modified.

Пара дополнительных сведений, если они актуальны:

  • Я не установил заголовок Date.Требуется ли это для правильной работы заголовков Expires / Last-Modified?
  • В настоящее время я не устанавливаю заголовок Cache-Control, считая, что Expires / Last-Modified будет "достаточно хорошим"".
  • Веб-сайт развернут как по протоколам https, так и по http, и я видел проблему в обоих развертываниях.Я думал, что это остановит прокси-сервер, являющийся причиной, но теперь понимаю, что некоторые прокси-серверы перехватывают трафик SSL.

Кто-нибудь еще испытывал что-либо подобное и выяснил, почему это происходит?

...