2010-02-16 12 views
3

J'ai le résultat suivant d'une méthode Jersey @GET. Cela fonctionne, bien mais inclut toujours l'en-tête No-cache. Je voudrais permettre au client de mettre en cache ces données car elles changent rarement.Paramétrer Jersey pour autoriser la mise en cache?

ResponseBuilder rb = Response.ok(c); 
    CacheControl cc = new CacheControl(); 
    cc.setMaxAge(60); 
    cc.setNoCache(false); 
    return rb.cacheControl(cc).build(); 

La réponse est toujours:

Server Apache-Coyote/1.1 
Pragma No-cache 
Cache-Control no-cache, no-transform, max-age=60 
Expires Wed, 31 Dec 1969 19:00:00 EST 
Content-Type application/xml 
Content-Length 291 
Date Tue, 16 Feb 2010 01:54:02 GMT 

Ce que je fais mal ici?

Répondre

5

Cela a été provoqué par l'activation de l'authentification BASIC.

Spécifier dans le contexte corrigera le problème:

<Valve className="org.apache.catalina.authenticator.BasicAuthenticator" 
     disableProxyCaching="false" /> 

Hope this helps quelqu'un d'autre.

0

Votre code semble correct.

Quel conteneur utilisez-vous? Assurez-vous que le cache n'est pas désactivé. Vérifiez également que les gestionnaires de réponse en aval ou les filtres ne définissent pas la directive no-cache.

+0

Utilisation de Tomcat6. Je vais jeter un coup d'oeil à ça, merci! Je deviens fou ici! –

+0

En utilisant également Spring, je ne sais pas si cela compte. Je ne vois rien dans un conteneur qui permettrait de le faire. Toujours en regardant bien. –

+0

Les en-têtes de cache peuvent également être définis au printemps. Je pense que le "no-cache" n'est généralement pas défini par défaut. Essayez de frapper une ressource statique pour exclure Tomcat en premier. Ensuite, en fonction de la complexité de votre application, décollez-la une couche à la fois, par ex. 1) câbler une servlet simple ou jsp dans Spring et vérifier l'en-tête de contrôle de cache; 2) désactiver temporairement tous les filtres; etc. – marklai