Querystring aléatoire pour éviter la mise en cache de l'IE
C'est un problème connu que IE caches trop de html, même quand on donne un Cache-Control: no-cache
ou Last-Modified
en-tête de everypage.
Ce behaiviour est vraiment troublant lorsque l'on travaille avec querystrings pour obtenir des informations dynamiques, que IE juge qu'il est de la même page (c'est à dire: http://example.com/?id=10
) et sert à la version en cache.
Je l'ai résolu en ajoutant un nombre aléatoire ou un timestring à la querystring ( comme d'autres l'ont fait ), comme cela http://example.com/?id=10&t=2009-08-06_13:12:56
que je viens d'ignorer serverside.
Est-il une meilleure solution? Est-il une autre, le moyen le plus propre-à-vis de cela? Je suis conscient que POST
n'est pas mis en cache, mais il est semanticaly correct d'utiliser GET
ici.
source d'informationauteur Esteban Küber
Vous devez vous connecter pour publier un commentaire.
En supposant que vous utilisez jQuery, au lieu d'utiliser $.obtenir ou $.getJson, l'utilisation la plus générique $.ajax et de définir explicitement le cache de la valeur à false. Voici un exemple:
Un peu plus de code requis (pas très bien) que de l'utiliser .getJson ou .obtenez, mais va résoudre le problème proprement sans ajout de nombres aléatoires.
Vous pouvez également utiliser le Temps Unix courant (en millisecondes) pour éviter le problème de beaucoup de demandes en une seconde (il est beaucoup moins susceptibles d'avoir de multiples demandes en une milliseconde)
À l'aide d'un nombre aléatoire (pas de date) dans la chaîne de requête, ou en train de modifier le nom de fichier sont les deux méthodes recommandées. Steve Souders et YAHOO! groupe de performance a publié un tonne d'informations utiles et pratiques qu'ils ont découvert et mis au point tout en optimisant l'un des plus fréquentés des propriétés.
Donc, en fin de compte, le seul moyen fiable pour ce faire (grâce à IE6) est à l'aide d'un
aléatoire
ou
le temps lié
querystring.
Vous pouvez utiliser un
le temps lié querystring
que seules les modifications de toutes les 15 secondes (ou toute autre quantité de temps), donc, si vous voulez baisser le serveur de comptage, comme vous aimeriez voir mis en cache localement le contenu de ces 15 secondes.
Si vous avez
un
standard
conforme
navigateurvous pouvez vous en sortir avec seulement l'aide de
ETags.
J'ai le même problème, mais prendre soin, en une seconde il peut y avoir beaucoup de demandes. C'est pourquoi j'utilise ceci:
Avez-vous essayé d'ajouter un ETag tête dans la réponse?
Vous pouvez utiliser un hasard, ou une somme de contrôle de la page générée, de sorte que la version mise en cache est servi le cas échéant.
Je ne sais pas quel est le comportement d'IE, mais avec les versions récentes, il doit travailler.
Voir aussi la HTTP RFC section sur ETag