Quelles requêtes les actualisations «F5» et «Ctrl + F5» des navigateurs génèrent-elles?

394

Existe-t-il une norme pour quelles actions F5et Ctrl + F5déclencheurs dans les navigateurs Web?

J'ai déjà fait des expériences dans IE6 et Firefox 2.x. L' F5 actualisation déclencherait une demande HTTP envoyée au serveur avec un en- If-Modified-Sincetête, alors qu'elle Ctrl + F5n'aurait pas un tel en-tête. À ma connaissance, F5 essaiera d'utiliser le contenu mis en cache autant que possible, tandis que Ctrl + F5 vise à abandonner tout le contenu mis en cache et à récupérer à nouveau tout le contenu des serveurs.

Mais aujourd'hui, j'ai remarqué que dans certains des derniers navigateurs (Chrome, IE8) cela ne fonctionne plus de cette façon. Les deux F5et Ctrl + F5envoyer l'en- If-Modified-Sincetête.

Alors, comment est-ce censé fonctionner, ou (s'il n'y a pas de norme) comment les principaux navigateurs diffèrent-ils dans la façon dont ils implémentent ces fonctionnalités de rafraîchissement?

Morgan Cheng
la source
10
FWIW: alors que cela pourrait certainement être un sujet de super utilisateur, et pourrait même avoir été conçu comme quelque peu axé sur l'utilisateur final à la demande initiale, à ce stade, il a été répondu et référencé par les programmeurs et les développeurs Web et devrait probablement être laissé ici . SU en a déjà plusieurs autres versions plus orientées vers l'utilisateur final, et n'en a pas besoin ...
Shog9
2
xkcd.com/1854
sudo bangbang

Réponses:

313

En général:

F5peut vous donner la même page même si le contenu est modifié, car il peut charger la page à partir du cache. Mais Ctrl- F5force une actualisation du cache et garantit que si le contenu est modifié, vous obtiendrez le nouveau contenu.

dancavallaro
la source
86
Thi est précis, mais notez que même si Ctrl + F5 amènera le navigateur à jeter le cache et à en demander un nouveau au serveur, le serveur peut ignorer l'en-tête sans cache et servir une page mise en cache côté serveur. Ainsi, même Ctrl + F5 peut renvoyer une ancienne version de la page si le serveur ignore l'en-tête no-cache.
AaronLS
F5 rafraîchira la page - CTRL + F5 fera un rafraîchissement «dur».
Dimitri Dewaele
Mentionnez également que Ctrl-F5 soumettra un formulaire, le cas échéant.
jawo
Ok, donc si vous appuyez sur ctrl + f5, vous dites à votre navigateur de ne pas utiliser son cache, mais que se passe-t-il lors des requêtes suivantes sur la même page? Je veux dire, pouvez-vous voir les anciennes versions de la page après avoir vu la plus ancienne? Si je vois la version 1 de la page parce qu'elle est mise en cache mais que la version 2 est déjà disponible, je comprends que le fait d'appuyer sur ctrl + f5 me fera voir la version2. Ensuite, je ferme mon navigateur et rouvre cette page, ¿puis-je voir la version 1 ou je vois toujours la version2? Merci.
molerus
525

Cela dépend du navigateur, mais ils se comportent de manière similaire.

J'ai testé FF, IE7, Opera et Chrome.

F5met généralement à jour la page uniquement si elle est modifiée. Le navigateur essaie généralement d'utiliser tous les types de cache autant que possible et ajoute un en-tête "If-modified-since" à la demande. Opera diffère en envoyant un "Cache-Control: no-cache".

CTRL- F5est utilisé pour forcer une mise à jour, sans tenir compte de tout cache. IE7 ajoute un "Cache-Control: no-cache", tout comme FF, qui ajoute également "Pragma: no-cache". Chrome fait un "If-modified-since" normal et Opera ignore la clé.

Si je me souviens bien, c'est Netscape qui a été le premier navigateur à ajouter la prise en charge du contrôle du cache en ajoutant "Pragma: No-cache" lorsque vous avez appuyé sur CTRL- F5.

Modifier: tableau mis à jour

Le tableau ci-dessous est mis à jour avec des informations sur ce qui se passera lorsque le bouton d'actualisation du navigateur est cliqué (après une demande de Joel Coehoorn ), et l'en-tête "max-age = 0" Cache-control-header.

Tableau mis à jour, 27 septembre 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│- │                                │
└────────────┴──┴──┴──┴──┴──┴────────────────────────────────┘

Versions testées:

  • Firefox 3.1.6 et 3.0.6 (WINXP)
  • MSIE 8.0.6001 et 7.0.5730.11 (WINXP)
  • Chrome 6.0.472.63 et 1.0.151.48 (WINXP)
  • Opera 10.62 et 9.61 (WINXP)

Remarques:

  1. La version 3.0.6 envoie I et C, mais 3.1.6 ouvre la page dans un nouvel onglet, faisant une demande normale avec seulement "I".

  2. La version 10.62 ne fait rien. 9.61 pourrait faire C sauf s'il s'agissait d'une faute de frappe dans mon ancienne table.

Remarque à propos de Chrome 6.0.472 : si vous effectuez un rechargement forcé (comme CTRL- F5), il se comporte comme si l'URL était marquée en interne pour toujours effectuer un rechargement forcé. Le drapeau est effacé si vous allez dans la barre d'adresse et appuyez sur Entrée.

certains
la source
5
@Joel Coehoorn: Mise à jour du tableau en cliquant sur le bouton Actualiser. Vous devez aimer les tableaux graphiques ASCII, n'est-ce pas? Le codage couleur n'était qu'un effet secondaire du codage couleur du code.
du
11
Ne pouvez-vous pas le faire comme un bon tableau HTML?
John Topley
13
Pour info - cette réponse a en fait été référencée sur les tableaux de développement / suivi des bogues de chrome: code.google.com/p/chromium/issues/detail?id=1906
Kip
18
@John Topley: Les tables ne sont pas autorisées, donc la réponse est non.
du
1
Excellent travail sur cette table - cela appartient à quirksmode. +1. Je me demande s'il y a aussi des variations dans les en-têtes utilisés pour demander des ressources dans la page actualisée, comme les images, les feuilles de style, etc ...
James Hart
68

J'ai implémenté une page compatible avec plusieurs navigateurs pour tester le comportement de rafraîchissement du navigateur (voici le code source ) et obtenir des résultats similaires à @some, mais pour les navigateurs modernes:

entrez la description de l'image ici

Pavel Podlipensky
la source
Les liens sur votre page sont cassés, j'ai corrigé le lien sur la réponse, mais beaucoup de liens de cette page sont cassés. podlipensky.com/examples/refreshbutton/index.html , podlipensky.com/post/2012/02/27/…
Juan Mendes
Désolé, à ce sujet - faire la migration du blog. Les liens seront corrigés dès que possible, pour l'instant - veuillez aller dans le dépôt github et télécharger des exemples.
Pavel Podlipensky
Les liens sont toujours rompus. La migration n'est pas terminée?
bernardn
Pouvez-vous mettre à jour votre réponse avec la version actuelle des navigateurs, en particulier Safari mobile et de bureau, @ PavelPodlipensky?
Greg Dubicki
9

Au moins dans Firefox (v3.5), le cache semble être désactivé plutôt que simplement effacé. S'il y a plusieurs instances de la même image sur une page, elle sera transférée plusieurs fois. C'est également le cas pour les imgbalises qui sont ajoutées ultérieurement via Ajax / JavaScript.

Donc, au cas où vous vous demandez pourquoi le navigateur continue de télécharger la même petite icône plusieurs centaines de fois sur votre site Ajax d'actualisation automatique, c'est parce que vous avez initialement chargé la page en utilisant CTRL- F5.

mermshaus
la source
3

IE7 / 8/9 semble se comporter différemment selon que la page est active ou non.

Si vous cliquez sur la page et CTRL+ F5puis "Cache-Control: no-cache" est inclus dans les en-têtes de demande. Si vous cliquez dans la barre Emplacement / Adresse, appuyez sur CTRL+ F5ce n'est pas le cas.

Phil Haselden
la source
1

Lorsque l'utilisateur appuie sur F5 bien que la nouvelle demande soit envoyée au serveur Web et obtienne également une réponse à la demande. Mais lorsque l'en-tête responce est analysé, il vérifie les informations requises dans le cache du navigateur. Si les informations requises dans le cache n'ont pas expiré, ces informations sont restaurées à partir du cache lui-même.

Lorsque l'utilisateur clique sur CTRL- F5même alors, la nouvelle demande est envoyée au serveur Web et obtient une réponse. Mais cette fois, lorsque l'en-tête responce est analysé, il ne vérifie pas les informations requises dans le cache et n'apporte que toutes les informations mises à jour du serveur de formulaire.

naXa
la source