2010-10-10 6 views
0

Bonjour, J'ai besoin que les résultats de ma servlet soient toujours mis en cache par le navigateur. Essayer de mettre les mêmes en-têtes comme http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js mais les résultats ne viennent toujours pas du cache du navigateur (testé avec FireBug).GAE & mise en cache de réponse

Mon code:

response.setContentType("text/javascript"); 
    response.setHeader("Last-Modified", "Mon, 15 Feb 2010 23:30:12 GMT"); 
    response.setHeader("Date", "Tue, 28 Sep 2010 19:45:24 GMT"); 
    response.setHeader("Expires", "Wed, 28 Sep 2021 19:45:24 GMT"); 
    response.setHeader("Vary", "Accept-Encoding"); 
    response.setHeader("X-Content-Type-Options", "nosniff"); 
    response.setHeader("Cache-Control", "public, max-age=31536000"); 
    response.setHeader("Age", "36"); 

Mes têtes (Firebug):

HTTP/1.1 200 OK 
Content-Type: text/javascript; charset=UTF-8 
Last-Modified: Mon, 15 Feb 2010 23:30:12 GMT 
Date: Sun, 10 Oct 2010 14:40:49 GMT 
Expires: Mon, 10 Oct 2011 14:40:49 GMT 
Vary: Accept-Encoding 
X-Content-Type-Options: nosniff 
Server: sffe 
Content-Encoding: gzip 
Cache-Control: public, max-age=31536000 
Content-Length: 46401 
Age: 2 

têtes Googleapis:

HTTP/1.1 200 OK 
Content-Type: text/javascript; charset=utf-8 
Last-Modified: Mon, 15 Feb 2010 23:30:12 GMT 
Expires: Wed, 28 Sep 2021 19:45:24 GMT 
Vary: Accept-Encoding 
X-Content-Type-Options: nosniff 
Cache-Control: public, max-age=31536000 
Age: 36 
Content-Encoding: gzip 
Date: Sun, 10 Oct 2010 14:32:06 GMT 
Server: Google Frontend 
Content-Length: 36838 

Tous les en-têtes sont les mêmes, mais avec un ordre différent (même si le code - ne devrait pas, apparemment GAE renverse la commande). Dans quel peut être le problème? Merci.

Répondre

2

La commande n'a pas d'importance. Avez-vous des problèmes avec ça? En théorie, cela peut arriver si le servletcontainer utilisé par GAE utilise un HashMap pour stocker les en-têtes avant de valider la réponse et votre conteneur de servlet local un LinkedHashMap ou un List<Pair>. En ce qui concerne la mise en cache des réponses, vous avez besoin d'au moins un en-tête Expires futur lointain avec un en-tête valide ETag ou Last-Modified. Les Cache-Control et Age ne sont pas nécessaires.

+0

Je ne peux pas modifier l'ordre. Par conséquent, les en-têtes sur la sortie sont presque identiques, mais FireFox refuse pour une raison quelconque de mettre en cache les scripts. Un exemple de travail: http://static.metabus.ru/js/join.js?jquery-1.4.2.min.js,jquery.mousewheel-3.0.js Lors de la mise à jour de cette URL avec FireBug, je peux voir ce navigateur à chaque fois charge des données. Mais http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js chaque fois est pris du cache. – chardex

+0

Il est correctement mis en cache ici. Votre problème se situe ailleurs. Ne faites-vous pas un "rafraichissement" en utilisant Ctrl + F5 ou plus? – BalusC

+0

Non, juste F5. Comment déterminez-vous que le résultat est correctement mis en cache? – chardex

1

Utilisez à la place addHeader. setHeader() écrase les valeurs précédemment définies