У меня есть веб-сайт, который получает много неожиданных запросов на статические ресурсы (изображения, файлы 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.
Кто-нибудь еще испытывал что-либо подобное и выяснил, почему это происходит?