Какие запросы вызывают обновления браузеров "F5" и "Ctrl + F5"?
Есть ли стандарт для каких действий F5 и Ctrl + F5 триггер в веб-браузерах?
Я когда-то экспериментировал в IE6 и Firefox 2.x. Обновление F5 запускает HTTP-запрос, отправленный на сервер с заголовком If-Modified-Since
, а Ctrl + F5 не будет иметь такого заголовка. По моему мнению, F5 будет стараться максимально использовать кешированный контент, а Ctrl + F5 - отказаться от всего кэшированного контента и снова получить все содержимое с серверов.
Но сегодня я заметил, что в некоторых из последних браузеров (Chrome, IE8) это больше не работает. Оба F5 и Ctrl + F5 отправляют заголовок If-Modified-Since
.
Итак, как это должно работать, или (если нет стандартного), как основные браузеры отличаются тем, как они реализуют эти функции обновления?
Ответы
Ответ 1
Вообще говоря:
F5 может предоставить вам одну и ту же страницу, даже если содержимое изменено, поскольку оно может загружать страницу из кеша. Но Ctrl - F5 заставляет обновлять кеш и гарантирует, что если содержимое будет изменено, вы получите новое содержимое.
Ответ 2
Это зависит от браузера, но они ведут себя аналогичным образом.
Я тестировал FF, IE7, Opera и Chrome.
F5 обычно обновляет страницу только в том случае, если она изменена. Обычно браузер пытается использовать все типы кешей как можно больше и добавляет заголовок "If-modified-since" к запросу. Opera отличается отправкой "Cache-Control: no-cache".
CTRL - F5 используется для принудительного обновления без учета кеша. IE7 добавляет "Cache-Control: no-cache", также как и FF, который также добавляет "Pragma: no-cache". Chrome делает обычный "If-modified-since", и Opera игнорирует ключ.
Если я правильно помню, это был Netscape, который был первым браузером, который добавил поддержку кеш-контроля, добавив "Pragma: No-cache" при нажатии CTRL - F5.
Изменить: Обновленная таблица
В приведенной ниже таблице обновлена информация о том, что произойдет при нажатии кнопки обновления браузера (после запроса Joel Coehoorn) и "max- age = 0" Cache-control-header.
Обновленная таблица, 27 сентября 2010 г.
┌────────────┬───────────────────────────────────────────────┐
│ UPDATED │ Firefox 3.x │
│27 SEP 2010 │ ┌────────────────────────────────────────────┤
│ │ │ MSIE 8, 7 │
│ Version 3 │ │ ┌─────────────────────────────────────────┤
│ │ │ │ Chrome 6.0 │
│ │ │ │ ┌──────────────────────────────────────┤
│ │ │ │ │ Chrome 1.0 │
│ │ │ │ │ ┌───────────────────────────────────┤
│ │ │ │ │ │ Opera 10, 9 │
│ │ │ │ │ │ ┌────────────────────────────────┤
│ │ │ │ │ │ │ │
├────────────┼──┼──┼──┼──┼──┼────────────────────────────────┤
│ F5│IM│I │IM│IM│C │ │
│ SHIFT-F5│- │- │CP│IM│- │ Legend: │
│ CTRL-F5│CP│C │CP│IM│- │ I = "If-Modified-Since" │
│ ALT-F5│- │- │- │- │*2│ P = "Pragma: No-cache" │
│ ALTGR-F5│- │I │- │- │- │ C = "Cache-Control: no-cache" │
├────────────┼──┼──┼──┼──┼──┤ M = "Cache-Control: max-age=0" │
│ CTRL-R│IM│I │IM│IM│C │ - = ignored │
│CTRL-SHIFT-R│CP│- │CP│- │- │ │
├────────────┼──┼──┼──┼──┼──┤ │
│ Click│IM│I │IM│IM│C │ With 'click' I refer to a │
│ Shift-Click│CP│I │CP│IM│C │ mouse click on the browsers │
│ Ctrl-Click│*1│C │CP│IM│C │ refresh-icon. │
│ Alt-Click│IM│I │IM│IM│C │ │
│ AltGr-Click│IM│I │- │IM│- │ │
└────────────┴──┴──┴──┴──┴──┴────────────────────────────────┘
Проверенные версии:
- Firefox 3.1.6 и 3.0.6 (WINXP)
- MSIE 8.0.6001 и 7.0.5730.11 (WINXP)
- Chrome 6.0.472.63 и 1.0.151.48 (WINXP)
- Opera 10.62 и 9.61 (WINXP)
Примечания:
-
Версия 3.0.6 отправляет я и C, но 3.1.6 открывает страницу на новой вкладке,
делая обычный запрос только с "I".
-
Версия 10.62 ничего не делает. 9.61 может сделать C, если это не было опечаткой в моей старой таблице.
Примечание о Chrome 6.0.472. Если вы выполняете принудительную перезагрузку (например, CTRL - F5), она ведет себя так же, как URL-адрес, помеченный внутри, всегда выполняет принудительную перезагрузку. Флаг очищается, если вы перейдете в адресную строку и нажмите клавишу ввода.
Ответ 3
Я реализовал кросс-браузер-совместимую страницу, чтобы протестировать поведение обновления браузера (вот исходный код) и получить результаты, аналогичные @some, но для современных браузеров:
![enter image description here]()
Ответ 4
По крайней мере, в Firefox (v3.5) кеш, кажется, отключен, а не просто очищен. Если на странице несколько экземпляров одного и того же изображения, оно будет передано несколько раз. Это также относится к тегам img
, которые впоследствии добавляются через Ajax/JavaScript.
Итак, если вам интересно, почему браузер загружает одну и ту же иконку несколько сотен раз на вашем сайте Ajax с автоматическим обновлением, это связано с тем, что вы первоначально загрузили страницу с помощью CTRL - F5.
Ответ 5
IE7/8/9, похоже, ведут себя по-разному в зависимости от того, имеет ли страница фокус или нет.
Если вы нажмете на страницу и CTRL + F5, то в заголовки запроса будет включен "Cache-Control: no-cache". Если вы нажмете в строке Location/Address, нажмите CTRL + F5, это не так.
Ответ 6
Когда пользователь нажимает F5, хотя новый запрос отправляется на веб-сервер и получает ответ на запрос. Но когда заголовок responce Parsed проверяет требуемую информацию в кеше браузера. Если требуемая информация в кеше не истекла, тогда эта информация восстанавливается из самого кеша.
Когда пользователь нажимает кнопку CTRL - F5, тогда новый запрос отправляется на веб-сервер и получает ответ. Но на этот раз, когда заголовок responce Parsed не проверяет какую-либо необходимую информацию в кеше и выводит только сервер обновленной информации.