2013-03-04 41 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(); 
} 

```