Які запити створюють оновлення браузерів "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.