C'est un problème bien connu que c'est-à-dire que c'est-à-dire cache trop de HTML, même lorsque vous donnez un Ce behiviour est vraiment troublant lorsque vous travaillez avec QueryStrings pour obtenir des informations dynamiques, car c'est-à-dire que c'est le considérant comme la même page em> (c.-à-d .: J'ai résolu l'ajout d'un nombre aléatoire ou d'un tigramme à la QueryString ( Comme d'autres personnes ont fait ) comme ce Y a-t-il une meilleure option? Y a-t-il un autre moyen plus propre d'accomplir cela? Je suis conscient que Cache-Control: No-cache code> ou
Dernière modification code> en-tête sur tous les applications. p>
http://example.com/?id= 10 code>) et sert la version mise en cache. P>
http://example.com/?id=10&t=2009-08-06_13:12:56 code> que je viens d'ignorer Serverside. p>
post code> n'est pas mis en cache, mais il est sémantique correct d'utiliser
obtenir code> ici. P>
6 Réponses :
J'ai le même problème, mais prenez soin de vous en une seconde, il peut y avoir de nombreuses demandes. C'est pourquoi j'utilise ceci:
Eh bien, je ne veux pas que le même client b> frappe mon serveur plusieurs minuterie par seconde b>, cela ne vous dérange pas si les informations montrées sont de 1 seconde vieilles. Bien sûr, la sortie est un texte brut pour les humains.
Utilisation d'un nombre aléatoire (pas d'horodatage) sur le querystring ou modifier réellement le nom de fichier sont les deux méthodes recommandées. Steve Souders and Yahoo! 'S Performance Group a publié un tonne em> de informations et pratiques utiles qu'ils ont découvertes et développées tout en optimisant l'une des propriétés les plus visibles au monde. P>
Vous pouvez également utiliser l'heure actuelle Unix en millisecondes pour éviter le problème de nombreuses demandes en une seconde (il est beaucoup moins susceptible d'avoir plusieurs demandes dans une milliseconde)
Avez-vous essayé d'ajouter un Etag en-tête dans la réponse? Vous pouvez utiliser un point aléatoire ou une somme de contrôle de la page générée afin que la version mise en cache soit servie lorsque vous approchez. P>
Je ne suis pas sûr de ce qui est le comportement d'IE, mais avec des versions récentes, cela devrait fonctionner. P>
Voir aussi le Section RFC HTTP sur Etag A > p>
Alors, à la fin, le seul moyen fiable de le faire (grâce à IE6) utilise un aléatoire, ou lié querystring. p>
Vous pouvez utiliser un lié querystring qui ne change toutes les 15 secondes (ou tout autre laps de temps), de sorte que vous souhaitez baisser le nombre de succès du serveur, comme vous verriez le contenu mis en cache localement pour ces 15 secondes. p>
Si vous avez norme conforme du navigateur, vous pouvez vous en sortir avec seulement l'aide ETags . p>
Cela échouera à nouveau si l'utilisateur revient à la page à l'aide du bouton arrière et effectue une actualisation de la page. Avez-vous pu trouver une solution sûre qui fonctionne dans tous les cas? Merci.
Vous générez la partie "aléatoire" du QueryString avec JavaScript Clientside comme indiqué sur Stackoverflow.com/questions/1234246/... de cette façon, ce sera différent chaque fois i> le obtenez code> ou < Code> Post code> est fait.
"... (Merci à IE6) est ..." Merci à IE7 aussi, je n'ai pas encore testé IE8.
En supposant que vous utilisez jQuery, au lieu d'utiliser $ .GET ou $ .gejson, utilisez plus de dollars génériques $ .ajax et définissez explicitement la valeur de cache sur false. Ce qui suit est un exemple:
$.ajax({ url: "/Controller/Action", cache: false, type: "GET", dataType: "json", success: function(data, textStatus) { alert("success"); } });
Je dois constater que l'utilisation d'obtenir une demande d'obtention d'IE, nous devrions définir la mise en cache du HTML et que je définis le "cache: false" et cela empêchait d'apporter le résultat de cache..merics
Qu'est-ce que je demande: y a-t-il Autre façon I> de faire cela?
Votre affirmation est incorrecte, au fait. Ie ne "cache trop de HTML". Voir www.fiddler2.com/redir/?id=htttacperf pour la discussion sur la mise en cache dans IE.
@Eric, c'est-à-dire a un peu d'inattendu / incompatible comportement concernant la mise en cache .
en utilisant le générique $ .AJAX comme suggéré dans le message ci-dessus Stackoverflow.com/a/1767342/5969842 a aidé à résoudre le problème sans en utilisant un nombre aléatoire