2013-01-10 68 views
6

雖然這個問題應該是微不足道的,但我沒有成功在Web應用程序引擎Java服務器上啓用瀏覽器緩存。如何在GAE中啓用瀏覽器緩存

我試圖把這種事情在我的AppEngine-web.xml中:

<static-files> 
    <include path="/**.cache.**" expiration="365d" /> 
... 

,但是當我在尋找的響應頭,我覺得這個地方:

Content-Length: 196084 
Cache-Control: public, max-age=31536000 
Expires: Fri, 10 Jan 2014 19:40:45 GMT 
Content-Type: image/png 
Last-Modified: Tue, 18 Dec 2012 21:41:22 GMT 
Server: Jetty(6.1.x) 

這很好......但是這在生產環境中:

HTTP/1.1 304 Not Modified 
ETag: "RV4Bpg" 
X-AppEngine-Estimated-CPM-US-Dollars: $0.000000 
X-AppEngine-Resource-Usage: ms=109 cpu_ms=0 
Date: Thu, 10 Jan 2013 19:41:20 GMT 
Pragma: no-cache 
Expires: Fri, 01 Jan 1990 00:00:00 GMT 
Cache-Control: no-cache, must-revalidate 
Server: Google Frontend 

這是明確不是我想要:(

任何想法?我錯過了什麼?

[編輯] 對於還沒有下載的內容,我的瀏覽器收到以下標題:

HTTP/1.1 200 OK 
ETag: "RV4Bpg" 
Date: Fri, 11 Jan 2013 12:50:50 GMT 
Expires: Sat, 11 Jan 2014 12:50:50 GMT 
Cache-Control: public, max-age=31536000 
X-AppEngine-Estimated-CPM-US-Dollars: $0.000000 
X-AppEngine-Resource-Usage: ms=3 cpu_ms=0 
Date: Fri, 11 Jan 2013 12:50:50 GMT 
Pragma: no-cache 
Expires: Fri, 01 Jan 1990 00:00:00 GMT 
Cache-Control: no-cache, must-revalidate 
Content-Type: image/png 
Server: Google Frontend 
Content-Length: 196084 
Proxy-Connection: Keep-Alive 
Connection: Keep-Alive 
X-RBT-Optimized-By: eu-dcc-sh02 (RiOS 6.5.5b) SC 

一個ETag和幾個矛盾「過期」和「緩存控制」 ...... 有幾種配置緩存策略的方法?它能來自我的ISP嗎?或代理?

+0

在App Engine上的Servlet響應中可能重寫了[與高速緩存相關的HTTP標頭](http://stackoverflow.com/questions/14172758/cache-related-http-headers-are-overridden-in- servlet-response-on-app-engine) – icza

回答

9

當你登錄到谷歌的App Engine應用程序作爲管理員:

  1. 在你的問題中顯示的X-AppEngine-*頭都包括在內。
  2. 包含Cache-Control: no-cache, must-revalidate標頭,因爲X-AppEngine-*標頭是私有的,不得高速緩存。

    迴應與資源使用統計信息將作出不可緩存:

這在迴應部分在https://developers.google.com/appengine/docs/python/runtime#Responses末,該說是隱藏的。

+0

哼,你說得對。所有坦克。 – Kroc

+1

我的問題與問題中的問題類似,我想指出的是,即使您未以GAE管理員身份登錄(例如,使用Chrome作爲guest或註銷或某物),仍然可以獲得304。我的情況我使用了Chrome,沒有以GAE admin的身份登錄,開啓了開發工具,'Disable cache(DevTools is open)'未被選中。仍然304.我發現原因是,當hittin cmd + R(或ctrl + R)瀏覽器不使用緩存。嘗試單擊瀏覽器的url字段,然後單擊Enter,所有這些304現在應該是200(緩存)。 – stianlp

2

是,Cache-Control是關閉,因爲答覆是HTTP 304

的問題是,您的瀏覽器保存的ETag的:http://en.wikipedia.org/wiki/HTTP_ETag

現在,對於相同的URL /內容的每個請求,瀏覽器提供的ETag和GAE回覆HTTP 304未修改。

嘗試更改此網址的資源(圖片),檢查尚未在此瀏覽器中加載的另一個網址,或者使用其他瀏覽器或計算機。

此外,這是相關的:What takes precedence: the ETag or Last-Modified HTTP header?

+0

感謝您提供此ETag功能。 對於新內容,瀏覽器會收到一個ETag和過期日期。 (我現在不會發布標題,因爲我不處於類似狀況。例如代理) 我會完成我的問題。 – Kroc