Кеширование браузера - почему IE9 всегда показывает http 304, хотя на самом деле он не попал в сеть?

Я пытаюсь правильно настроить кеширование и установил заголовки Expires на 365 дней в будущем, которые работают правильно, но не отображаются правильно в IE9. Кто-нибудь знает почему?

Когда вы посещаете любой веб-сайт в IE9 (например, www.google.com), затем нажмите Enter в адресной строке, чтобы вернуться к нему с полным кэшированием, он показывает много дополнительных 304, которые Fiddler не показывает.

Глядя на вкладку сетевого инспектора (на F12), IE9 показывает, что он получил 304 ответа «Не изменено» для файлов CSS и JS и 3 изображения (возможно, изображения с датами изменения примерно в прошлом месяце — остальные 30 не показанных изображений старше).

Однако, согласно Fiddler и просмотру журналов IIS на сервере на веб-сайте, который я разрабатываю, он фактически не отправлял эти запросы. На временной шкале сети IE9 эти серые 302 отображаются как отсутствие времени ожидания и время отклика «‹1 мс», тогда как, если я нажму F5, они также будут серыми 302, но будут показаны как время ожидания и загрузки в несколько миллисекунд (и они попадут в сеть).

Так почему же сетевой инспектор IE9 думает, что выдал для них условный запрос? Действительно ли он отправил запрос, который был удовлетворен где-то в сетевом стеке, прежде чем он попал в Fiddler?

Chrome показывает все запросы, включая все изображения, серым цветом 200 (из кеша), кроме самой страницы, которая имеет черный цвет 200 (что правильно согласно журналам Fiddler и IIS).

Firebug показывает серый 200 OK для CSS и JS и, как ни странно, только одно изображение (также правильно, если серый 200 означает из кеша, но почему показывать только эти ресурсы, а не все остальные изображения?)

Я читал сообщения в блоге Эрика Лоуренса о кэшировании IE9 и сетевом стеке, но он не упоминает об этом странном поведении.


person mike nelson    schedule 20.01.2012    source источник


Ответы (1)


Просто для ясности: если вы не видите его в Fiddler, он не попал в сеть.

Вкладка IE Network имеет ряд ошибок, одна из которых заключается в том, что ей сложно отличить попадание в кэш, удовлетворяемое локально (например, отсутствие попадания в сеть), и то, которое требовало повторной проверки на сервере (например, 304).

Это связано с тем, что кэш обслуживается в WinINET, намного ниже вкладки «Сеть», которая находится над URLMon.

Сказав это, вот еще одна ссылка, которую вы можете проверить: Блог IEInternals об условных запросах

person EricLaw    schedule 22.01.2012
comment
Хорошо, спасибо, Эрик, да, я думал, что это может быть ошибка, связанная с тем, что стек IE усложняется WinInet и все такое. Спасибо за этот пост, я его не читал. - person mike nelson; 23.01.2012
comment
Эта ссылка кажется неработающей, есть идеи, куда был перемещен контент? - person Martin Brown; 09.12.2015