2011-05-08 1 views
1

Si je crée un XMLHttpRequest et que le navigateur met en cache la réponse, mettra-t-il également en cache les en-têtes de réponse HTTP? C'est-à-dire, la prochaine fois que je ferai la même demande, vais-je obtenir les mêmes valeurs de response.getResponseHeader?XMLHttpRequests met-il en cache les en-têtes de réponse?

Ce navigateur dépend-il?

+0

Avez-vous essayé? –

Répondre

0

Les en-têtes ne sont pas mis en cache ou ne sont pas réutilisés. Comme une demande est envoyée, les en-têtes sont reçus et seulement alors peut être décidé si cette demande est valide dans le cache. Les nouveaux en-têtes ont alors déjà été téléchargés, donc inutile de réutiliser les anciens.

Seul le corps de la réponse est mis en cache.

Vous pourriez très facilement tester ceci. Faites une demande XHR à une ressource statique (fichier img ou txt ou quelque chose) et vérifiez l'en-tête Date.

Je ne pense pas que cela dépende du navigateur. Un navigateur mettant en cache et réutilisant les en-têtes HTTP serait très, très étrange.

modifier
jQuery ajoute (par défaut, je pense) arguments de mise en cache des anti pour les requêtes GET (très ennuyeux), qui tri de répondre à votre question: rien ne se cache comme ça.

+0

Mais tous les XHR font-ils une demande au serveur? Lorsque vous liez une image ou une feuille de style mise en cache, le navigateur la réutilise parfois sans même parler au serveur. Cela n'arrive-t-il jamais avec les XHR? –

+0

Si vous faites une demande spécifique, le navigateur fait cette demande. Avec les images et les feuilles de style, vous ne faites pas spécifiquement cette demande. Si vous voulez être absolument sûr à 100%, vous pouvez ajouter un argument sans cache comme le fait jQuery: 'page.html? _ = 324832475934' – Rudie

1

Je suis certain qu'au moins les principaux navigateurs n'essaient pas de mettre en cache les en-têtes. Toutefois, si vous souhaitez empêcher la mise en cache, vous devrez peut-être envoyer des en-têtes spéciaux. Si vous voulez faire un test rapide des comportements de mise en cache, il y a une page ici:

http://www.mnot.net/javascript/xmlhttprequest/cache.html

et je le recommande si vous voulez voir ce qui se passe réellement, que vous allez obtenir un renifleur de paquets tels que Wireshark et voir pour toi. Je peux imaginer que le navigateur effectue au moins une requête HEAD pour un XmlHttpRequest même s'il vous donne le corps en cache, mais je peux me tromper.

+0

Vous n'avez pas tort. Les en-têtes doivent même savoir que le cache est toujours valide. – Rudie

Questions connexes