Какие запросы генерируют обновления браузеров «F5» и «Ctrl + F5»?


394

Существует ли стандарт для каких действий 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шапку.

Итак, как это должно работать, или (если нет стандарта), как основные браузеры отличаются тем, как они реализуют эти функции обновления?


10
FWIW: хотя это, безусловно, может быть темой для суперпользователя , и, возможно, даже изначально задумывалось как ориентированное на конечного пользователя, на данный момент на него уже отвечали и на него ссылались программисты и веб-разработчики, и, вероятно, его следует оставить здесь , У SU уже есть несколько других, более ориентированных на конечного пользователя версий этого, и они не нужны ...
— Shog9

Ответы:


313

Вообще говоря:

F5может дать вам ту же страницу, даже если содержание изменилось, потому что это может загрузить страницу из кэша. Но Ctrl- F5форсирует обновление кэша и гарантирует, что если контент будет изменен, вы получите новый контент.


86
Это верно, но учтите, что хотя Ctrl + F5 заставит браузер выбросить кеш и запросить новый у сервера, сервер может игнорировать заголовок no-cache и обслуживать кэшированную страницу на стороне сервера. Таким образом, даже Ctrl + F5 может вернуть старую версию страницы, если сервер игнорирует заголовок no-cache.
— AaronLS

F5 обновит страницу - CTRL + F5 выполнит «жесткое» обновление.
— Димитрий Деваэле

Также отметим, что Ctrl-F5 отправит форму, если она задана.
— Джаво

Итак, если вы нажмете Ctrl + F5, вы скажете браузеру не использовать его кеш, но что произойдет в последующих запросах к той же странице? Я имею в виду, вы можете увидеть старые версии страницы после того, как вы увидели самую старую? Если я вижу версию 1 страницы, потому что она кешируется, но уже есть версия 2, я понимаю, что нажатие Ctrl + F5 заставит меня увидеть версию 2. Затем я закрываю свой браузер и снова открываю эту страницу: я вижу версию 1 или я все еще вижу версию 2? Спасибо.
— Molerus

525

Это зависит от браузера, но они ведут себя аналогичным образом.

Я тестировал 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.

Изменить: обновленная таблица

Приведенная ниже таблица обновлена ​​информацией о том, что произойдет, когда будет нажата кнопка обновления браузера (после запроса Джоэла Кехорна ), и "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)
  • Опера 10,62 и 9,61 (WINXP)

Ноты:

  1. Версия 3.0.6 отправляет I и C, но 3.1.6 открывает страницу в новой вкладке, делая обычный запрос только с «I».

  2. Версия 10.62 ничего не делает. 9.61 может сделать C, если это не опечатка в моей старой таблице.

Примечание о Chrome 6.0.472 : если вы выполняете принудительную перезагрузку (например, CTRL- F5), она ведет себя так, как если бы URL-адрес был внутренне помечен, чтобы всегда выполнять принудительную перезагрузку. Флаг сбрасывается, если вы идете в адресную строку и нажимаете ввод.


5
@Joel Coehoorn: обновил таблицу, нажав на кнопку обновления. Нужно любить графические таблицы ASCII, не так ли? Цветовая кодировка была лишь побочным эффектом кодовой цветовой кодировки.
— некоторые

11
Разве вы не можете сделать это как правильную таблицу HTML?
— Джон Топли

13
FYI - это ответ на самом деле была ссылка на трековых доски развития хром / ошибка: code.google.com/p/chromium/issues/detail?id=1906
— Кип

18
@ Джон Топли: Таблицы не разрешены, поэтому ответ - нет.
— некоторые

1
Отличная работа на этом столе - это относится к причудливому режиму. +1. Интересно, существуют ли различия в том, какие заголовки используются для запроса ресурсов на обновленной странице, таких как изображения, таблицы стилей и т. Д.
— Джеймс Харт

68

Я реализовал кросс-браузер-совместимую страницу, чтобы протестировать поведение обновления браузера (вот исходный код ) и получить результаты, аналогичные @some, но для современных браузеров:

введите описание изображения здесь


Ссылки на вашей странице не работают, я исправил ссылку в ответе, но многие ссылки с этой страницы не работают. podlipensky.com/examples/refreshbutton/index.html , podlipensky.com/post/2012/02/27/…
— Хуан Мендес

Извините, об этом - занимаюсь миграцией блогов. Ссылки будут исправлены КАК МОЖНО СКОРЕЕ, пока - перейдите в репозиторий github и загрузите примеры.
— Павел Подлипенский

Ссылки все еще битые. Миграция не закончена?
— Бернардн

Не могли бы вы обновить свой ответ текущей версией браузеров, особенно Safari для мобильных и настольных компьютеров, @PavelPodlipensky?
— Грег Дубицки

9

По крайней мере в Firefox (v3.5), кеш, кажется, отключен, а не просто очищен. Если на странице несколько экземпляров одного и того же изображения, оно будет передано несколько раз. Это также относится и к imgтегам, которые впоследствии добавляются через Ajax / JavaScript.

Поэтому, если вам интересно, почему браузер несколько сотен раз загружает один и тот же маленький значок на ваш сайт Ajax с автообновлением, это потому, что вы изначально загрузили страницу, используя CTRL- F5.


3

IE7 / 8/9, кажется, ведут себя по-разному в зависимости от того, на какой странице находится фокус или нет.

Если щелкнуть страницу и нажать « CTRL+ F5», в заголовки запроса будет включено «Cache-Control: no-cache». Если вы нажмете в адресной строке / адресной строке, нажмите CTRL+, F5это не так.


1

Когда пользователь нажимает, F5хотя новый запрос отправляется на веб-сервер, он также получает ответ на запрос. Но когда заголовок ответа анализируется, он проверяет необходимую информацию в кэше браузера. Если требуемая информация в кеше не истекла, то эта информация восстанавливается из самого кеша.

Когда пользователь нажимает CTRL- F5даже тогда новый запрос отправляется на веб-сервер и получает ответ. Но на этот раз, когда заголовок ответа анализируется, он не проверяет необходимую информацию в кеше и выводит только обновленную информацию только на сервер формы.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.