Existe-t-il une norme concernant les actions que F5 et Ctrl + F5 déclenchent dans les navigateurs Web ?
J'ai fait une fois l'expérience dans IE6 et Firefox 2.x. Le rafraîchissement par F5 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 j'ai compris, F5 essaiera d'utiliser le contenu mis en cache autant que possible, tandis que Ctrl + F5 est destiné à abandonner tout le contenu mis en cache et à récupérer tout le contenu des serveurs à nouveau.
Mais aujourd'hui, j'ai remarqué que dans certains des derniers navigateurs (Chrome, IE8), cela ne fonctionne plus de cette manière. Tant F5 que Ctrl + F5 envoient l'en-tête If-Modified-Since
.
Comment cela est-il censé fonctionner ou (s'il n'y a pas de norme) comment les principaux navigateurs diffèrent-ils dans l'implémentation de ces fonctions d'actualisation ?
[1] : http://morganchengmo.spaces.live.com/blog/cns!9950CE918939932E!2144.entry [2] : http://blog.httpwatch.com/2007/10/19/using-ctrlf5-in-ie-7/
C'est au navigateur de décider, mais ils se comportent de manière similaire.
J'ai testé FF, IE7, Opera et Chrome.
F5/kbd> 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 requête. Opera diffère en envoyant un en-tête "Cache-Control : no-cache" ;.
CTRL-F5 est utilisé pour forcer une mise à jour, sans tenir compte du 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 le support du contrôle de cache en ajoutant "Pragma : No-cache" ; lorsque vous appuyez sur CTRL-F5.
Edit: Tableau mis à jour
Le tableau ci-dessous a été mis à jour avec des informations sur ce qui se passe lorsque l'on clique sur le bouton de rafraîchissement du navigateur (après une demande de [Joel Coehoorn][1]), et sur l'en-tête de contrôle du cache "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 :
Notes :
La version 3.0.6 envoie I et C, mais la 3.1.6 ouvre la page dans un nouvel onglet, en faisant une demande normale avec seulement "I" ;.
La version 10.62 ne fait rien. La version 9.61 pourrait faire C, à moins qu'il ne s'agisse d'une faute de frappe dans mon ancien tableau.
Note sur 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é. L'indicateur est effacé si vous allez dans la barre d'adresse et appuyez sur entrée.
D'une manière générale :
F5 peut vous donner la même page même si le contenu est modifié, car il peut charger la page depuis le cache. Mais Ctrl-F5 force un rafraîchissement du cache et garantit que si le contenu est modifié, vous obtiendrez le nouveau contenu.
Lorsque l'utilisateur appuie sur F5 bien qu'une nouvelle demande soit envoyée au serveur web, il reçoit également une réponse à cette demande. Mais lorsque l'en-tête de la réponse est analysé, il vérifie les informations requises dans le cache du navigateur. Si l'information requise dans le cache n'a pas expiré, alors cette information est restaurée à partir du cache lui-même.
Lorsque l'utilisateur clique sur CTRL-F5 la nouvelle requête est envoyée au serveur web et reçoit une réponse. Mais cette fois, lorsque l'en-tête de la réponse est analysé, il ne vérifie pas les informations requises dans le cache, et apporte toutes les informations mises à jour depuis le serveur uniquement.