2011-09-01 28 views
0

我試圖在調用Java Servlet鏈接時輸出圖像。目前使用以下內容:Java Servlet Cache Aggresively

response.addHeader("Cache-Control", "max-age=" + CACHE_INTERVAL); 
response.addDateHeader("Expires", System.currentTimeMillis() + (1000*CACHE_INTERVAL)); 

但是,這仍然會導致圖像從服務器有時重新加載。相比之下,如果你看一下這個標籤:

http://graph.facebook.com/502547234/picture

它再也沒有在Firefox ATLEAST重新加載。有什麼建議麼?我錯過了什麼?

更新標題:

礦:http://i.imgur.com/ikfVL.png

FB:http://i.imgur.com/o0KsM.png

+0

「有時」意味着它有時只會重新加載或總是重新加載? – home

+0

有時候,但我不是在談論硬性刷新。我意識到,Facebook的鏈接拋出一個304沒有修改標題,因爲我的總是200好 –

+1

這似乎是一個重複http://stackoverflow.com/questions/2872613/caching-images-served-by-servlet –

回答

1

比較頭你就錯過Last-Modified場。在回覆中設置此字段很可能會導致瀏覽器下次請求圖片If-Modified-Since請求標題字段。

如果沒有改變,你可以用304 Not Modified來回應。

另外,您可以使用E-Tag而不是使用Last-Modified標題,以便更好地滿足您的需求。


但我想知道你的圖像沒有像你這樣做被緩存。據我所知你正在做最積極的緩存,導致大多數瀏覽器甚至不需要詢問更新的版本,直到expires導致完全沒有請求。這是可能的最積極的緩存。

它沒有被緩存的一個原因可能是你調用你的servlet的URL。它是什麼樣子的?

+0

我已更新我的帖子與標題。問題,我該如何返回304未修改? –

+0

你可以用'resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED)'來設置它,其中resp是'HttpServletResponse'的一個實例。希望能幫助到你。 –

+0

如何知道何時返回SC_NOT_MODIFIED?我的意思是至少有一次,我需要返回狀態200與實際的代碼權利。如何檢查If-Modified-Since標籤是否已設置?你能指導我的代碼? –