2010-02-16 86 views
3

我從Jersey @GET方法返回以下內容。它工作正常,但始終包含No-cache標頭。我想讓客戶端緩存這些數據,因爲它很少變化。設置Jersey以允許緩存?

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

的迴應總是:

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 

那我做錯了嗎?

回答

5

這是由於啓用了BASIC身份驗證引起的。

的背景下,指定這將解決此問題:

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

希望這可以幫助其他人了。

0

你的代碼看起來沒問題。

您正在使用哪個容器?確保緩存未被禁用。還要驗證下游響應處理程序或過濾器沒有設置no-cache指令。

+0

使用Tomcat6。我會看看這個,謝謝!我在這裏瘋了! – 2010-02-16 02:36:29

+0

也使用Spring,不知道是否重要。我沒有看到任何可以設置它的容器。儘管如此。 – 2010-02-16 02:39:00

+0

緩存標題也可以在Spring中設置。我認爲「無緩存」通常不會默認設置。嘗試使用靜態資源先排除Tomcat。然後根據您的應用程序的複雜程度,每次剝離一層,例如1)在Spring中連接一個普通的servlet或jsp並檢查緩存控制頭; 2)暫時禁用所有過濾器;等。 – marklai 2010-02-16 03:37:15