Кэширование в браузере. Почему IE9 всегда показывает http 304, когда на самом деле он не попадает в сеть? - PullRequest
21 голосов
/ 20 января 2012

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

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

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

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

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

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

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

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

1 Ответ

23 голосов
/ 22 января 2012

Просто чтобы прояснить, если вы не видите это в Fiddler, оно не попало в сеть.

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

Это потому, что кэш обслуживается в WinINET, намного ниже вкладки Network, которая находится выше URLMon.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...