web-dev-qa-db-fra.com

Quelles demandes les actualisations "F5" et "Ctrl + F5" des navigateurs génèrent-elles?

Y at-il une norme pour quelles actions F5 et Ctrl + F5 déclencher dans les navigateurs Web?

J'ai déjà expérimenté IE6 et Firefox 2.x. le F5 refresh déclencherait une requête HTTP envoyée au serveur avec un en-tête If-Modified-Since, tandis que Ctrl + F5 n'aurait pas un tel en-tête. D'après ce que je comprends, F5 essaiera d’utiliser le contenu en cache autant que possible, tout en Ctrl + F5 est destiné à abandonner tout le contenu mis en cache et à récupérer simplement tout le contenu des serveurs.

Mais aujourd’hui, j’ai remarqué que dans certains navigateurs récents (Chrome, IE8), cela ne fonctionnait plus de cette façon. Tous les deux F5 et Ctrl + F5 envoie l'en-tête If-Modified-Since.

Alors, comment cela est-il censé fonctionner ou (s'il n'y a pas de norme) en quoi les principaux navigateurs diffèrent-ils dans la manière dont ils implémentent ces fonctionnalités d'actualisation?

387
Morgan Cheng

En général:

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

300
dancavallaro

Cela dépend du navigateur, mais ils se comportent de la même manière.

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

F5 met 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-F5 est utilisé pour forcer une mise à jour, indépendamment de tout cache. IE7 ajoute un "Cache-Control: no-cache", tout comme FF, qui ajoute également "Pragma: no-cache". Chrome effectue normalement un "Si-modifié-depuis" 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.

Edit: Tableau mis à jour

Le tableau ci-dessous contient des informations sur ce qui se passera lorsque l'utilisateur cliquera sur le bouton de rafraîchissement du navigateur (après une requête de Joel Coehoorn ) et sur l'en-tête Cache-control-control "max-age = 0".

Mise à jour du tableau, 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, en faisant une demande normale avec seulement "I".

  2. La version 10.62 ne fait rien. 9.61 pourrait faire C à moins que ce ne soit une faute de frappe dans mon ancien tableau.

Remarque à propos de Chrome 6.0.472 : Si vous effectuez un rechargement forcé (comme CTRL-F5) il se comporte comme si l’URL est 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.

520
some

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

enter image description here

68
Pavel Podlipensky

Au moins dans Firefox (v3.5), le cache semble être désactivé plutôt que simplement effacé. S'il existe plusieurs occurrences de la même image sur une page, celle-ci sera transférée plusieurs fois. C'est également le cas pour les balises img qui sont ajoutées par la suite via Ajax/JavaScript.

Donc, si 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 à rafraîchissement automatique, c'est parce que vous avez initialement chargé la page à l'aide de CTRL-F5.

9
mermshaus

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

Si vous cliquez sur la page et CTRL+F5 alors "Cache-Control: no-cache" est inclus dans les en-têtes de requête. Si vous cliquez dans la barre Emplacement/Adresse, puis appuyez sur CTRL+F5 ce n'est pas.

3
Phil Haselden

Lorsque l'utilisateur appuie sur F5 bien que la nouvelle requête soit transmise au serveur Web et obtienne également une réponse. Mais lorsque l'en-tête de réponse 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-F5 même alors, une nouvelle demande est envoyée au serveur Web et reçoit une réponse. Mais cette fois, lorsque l'en-tête de réponse est analysé, il ne vérifie aucune information requise dans le cache et n'apporte que toutes les informations mises à jour sur le serveur.

1
Sunil