Які запити створюють оновлення браузерів "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: хоча це, безумовно, може бути темою Super User, і, можливо, навіть розраховане як на деякий кінцевий користувач, коли спочатку запитували, на цей момент на нього відповіли і посилаються програмісти та веб-розробники, і, ймовірно, слід залишити тут . У SU вже є кілька інших, більш орієнтованих на кінцевих користувачів версій цього, і він не потребує ...
Shog9

Відповіді:


313

Загалом:

F5може надати вам ту саму сторінку, навіть якщо зміна змінено, оскільки вона може завантажувати сторінку з кеша. Але Ctrl- F5змушує оновити кеш і гарантує, що якщо зміст змінено, ви отримаєте новий вміст.


86
Це точно, але зауважте, що, хоча Ctrl + F5 призведе до того, що браузер викине кеш і запитає новий з сервера, сервер може ігнорувати заголовок без кешу та обслуговувати кешовану сторінку на сервері. Таким чином, навіть Ctrl + F5 може повернути стару версію сторінки, якщо сервер ігнорує заголовок без кешу.
AaronLS

F5 оновить сторінку - CTRL + F5 зробить "жорстке" оновлення.
Димитрій Дьюаеле

Також згадайте, що Ctrl-F5 подасть форму, якщо вона надана.
jawo

Гаразд, тому якщо ви натиснете ctrl + f5, ви скажете своєму браузеру не використовувати кеш, але що буде в наступних запитах на ту саму сторінку? Я маю на увазі, чи можете ви побачити старіші версії сторінки після того, як ви побачили найстарішу? Якщо я бачу версію 1 сторінки, оскільки її кеш, але вже є версія 2, я розумію, що натискання клавіш ctrl + f5 змусить мене побачити version2. Потім я закриваю веб-переглядач і знову відкриваю цю сторінку, чи я бачу версію 1 чи я все ще бачу версію2? Дякую.
molerus

525

Це залежить від браузера, але вони поводяться аналогічно.

Я перевірив FF, IE7, Opera і Chrome.

F5зазвичай оновлює сторінку лише в тому випадку, якщо вона змінена. Зазвичай браузер намагається максимально використати всі типи кешу і додає до запиту заголовок "Якщо змінено з моменту". Opera відрізняється тим, що надсилає "Кеш-контроль: без кешу".

CTRL- F5використовується для примусового оновлення, ігноруючи будь-який кеш. IE7 додає "Кеш-контроль: без кешу", як і FF, який також додає "Прагма: не-кеш". Chrome робить звичайний "If-modified-since", а Opera ігнорує ключ.

Якщо я правильно пам'ятаю, саме Netscape був першим браузером, який додав підтримку кеш-керування, додавши "Pragma: No-cache" при натисканні CTRL- F5.

Редагувати: оновлена ​​таблиця

У таблиці нижче оновлюється інформація про те, що станеться після натискання кнопки оновлення браузера (після запиту Джоела Коехорна ) та заголовка кеш-пам'яті "max-age = 0".

Оновлений стіл, 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)

Примітки:

  1. Версія 3.0.6 надсилає I та C, але 3.1.6 відкриває сторінку в новій вкладці, роблячи звичайний запит лише "Я".

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

Примітка про Chrome 6.0.472 : Якщо ви робите примусове перезавантаження (наприклад CTRL- F5), він поводиться так, що URL-адреса є внутрішньо позначеною, щоб завжди робити примусове перезавантаження. Прапор знімається, якщо ви переходите до адресного рядка і натискаєте клавішу Enter.


5
@Joel Coehoorn: оновив таблицю, натиснувши кнопку оновлення. Вам подобається графічні таблиці ASCII, чи не так? Кольорове кодування було лише побічним ефектом кодування кольорового кодування.
десь

11
Ви не можете зробити це як правильну таблицю HTML?
Джон Топлі

13
FYI - ця відповідь фактично була посилана на дошки для відстеження / помилок хрому: code.google.com/p/chromium/isissue/detail?id=1906
Kip

18
@John Topley: Столи заборонені, тому відповідь - ні.
десь

1
Чудова робота над цим столом - це належить до quirksmode. +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то "Кеш-контроль: без кешу" включено до заголовків запитів. Якщо ви натиснете на рядок / адреса, натисніть CTRL+ F5це не так.


1

Коли користувач натискає, F5хоча новий запит переходить на веб-сервер і отримує відповідь на запит. Але коли заголовок відповіді розбирається, він перевіряє необхідну інформацію в кеш-пам’яті браузера. Якщо потрібна інформація в кеші не закінчилася, ця інформація буде відновлена ​​з самого кеша.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.