2013-03-04 40 views
1

我的GAE開發(Java)上有很多mouseover圖像。我在appspot.com上託管了它。當前的緩存控制頭我得到了= no-cache,重新驗證。所以,當圖像懸停並將鼠標移出時,它會重新加載圖像,然後這就是延遲時間...GAE的appspot.com緩存控制頭 - HTTP狀態304

我不知道該如何處理。請任何幫助(Java解決方案)?

編輯==>

appengine.xml

<?xml version="1.0" encoding="utf-8"?> 
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> 
    <application>s~xxxxxx</application> 

    <version>1</version> 

    <static-files> 
     <include path="/images/**" expiration="1d" /> 
     <include path="/scripts/**" expiration="1d" /> 
     <include path="/stylesheets/**" expiration="1d" /> 
     <include path="/*.p12" expiration="1d" /> 
     <include path="/favicon.ico" expiration="1d" /> 
    </static-files> 

    <threadsafe>true</threadsafe> 

    <warmup-requests-enabled>true</warmup-requests-enabled> 

    <system-properties> 
     <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/> 
    </system-properties> 

    <sessions-enabled>true</sessions-enabled> 
</appengine-web-app> 

當第一負載部署後的圖像(http://xxx.appspot.com/images/myicon.png),我會得到這樣的事情。有2個緩存控制...我想「無緩存」緩存控制取代了早期的私有緩存控制。

Response Header1

不過,如果我再次刷新該頁面時,它會返回HTTP 1.1 304未修改。

Response Header2

+1

你讀過這個文檔? https://developers.google.com/appengine/docs/java/config/appconfig#Setting_the_Cache_Expiration – 2013-03-04 16:29:29

+0

我做到了,但根本沒有任何幫助! – lannyboy 2013-03-05 05:57:53

+0

這些圖像是否作爲靜態文件提供?如果是這樣,請分享你的appengine-web.xml,以便其他人可以重現?如果這些文件由動態處理程序提供,請分享您的代碼。 – 2013-03-05 06:17:33

回答

5

如果您以管理員的身份登錄,應用程序引擎會嘗試壓低緩存行爲。你可以嘗試註銷或其他帳戶嗎?

這是一個相關的問題: http://code.google.com/p/googleappengine/issues/detail?id=8509

+0

是的,我試過一些不是管理員的東西。它仍然是一樣的... – lannyboy 2013-03-05 07:15:01

+0

你能分享其中一個圖像的實際鏈接嗎?我會檢查迴應。我的電子郵件地址是[email protected]。 – 2013-03-05 07:19:27

+0

如果管理員希望此功能可用,該怎麼辦?我有很多實際運行這個GAE網站的域管理員(用於谷歌的用法),所以你告訴我mouseover和mouseout實際上不是GAE UI設計的好主意? – lannyboy 2013-03-05 07:20:31

1

我也有一些問題,配置瀏覽器緩存和確定到期日:與谷歌應用程序引擎的Java靜態文件頭。問題在於web.xml中的過濾器映射否決了靜態文件的配置。我在這裏記錄了問題和解決方案: How to set Expires headers on static files with Google App Engine。檢查或共享您的web.xml文件可能很有趣。

0

是否必須是Java解決方案?純CSS解決方案如何避免Web請求和延遲(在第一個請求之後)?如果將所有翻轉圖像放在一起放入單個圖像中,並將每個翻轉圖像(sprite)的座標放入CSS中,您將幾乎可以立即看到圖像與瀏覽器可以快速顯示圖像一樣快。

這裏有一些信息的鏈接上的精靈:

最後一個環節使用這個例子CSS:

#logo-link 
{ 
width:191px; 
height:151px; 
text-decoration:none; 
display:block; 
background-image:url(dw-logo-sprite.jpg); 
background-position:191px 0; 
} 
#logo-link:hover,#logo-link:active { background-position:0 0; } 

基本上,你在CSS中聲明圖像的URL一次,幷包含第一個精靈的幾何圖形。懸停時,它將更改幾何圖形以使用第二個精靈(同一圖像)。

0

如果你想從一個servlet服務的圖像出於某種原因,那麼你可以設置cache-control響應頭像這樣與網隊:

@GET 
@Path("/{url}/{maxHeight}") 
@Produces("image/jpeg") 
public Response view(
     @Context HttpServletRequest req, 
     @PathParam("url") String url, 
     @PathParam("maxHeight") int maxHeight 
) throws IOException, URISyntaxException { 
    ... [code to generate imageData] 
    return Response 
      .ok(imageData) 
      .cacheControl(CacheControl.valueOf("max-age=2592000")) 
      .build(); 
} 

```