GAE的appspot.com缓存控制标头 - HTTP状态304

时间:2013-03-04 14:53:45

标签: google-app-engine

我的GAE开发(Java)上有很多鼠标悬停图像。我在appspot.com上托管了它。我得到的当前缓存控制头=无缓存,重新验证。因此,当图像悬停并且鼠标移出时,它将重新加载图像,然后这就是延迟来的地方......

我不知道如何处理这件事。请帮忙(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个缓存控件...我猜“no-cache”缓存控件取代了早期的私有缓存控件。

Response Header1

但是如果我再次刷新该页面,它将返回http 1.1 304 Not Modified。

Response Header2

4 个答案:

答案 0 :(得分:5)

如果您以管理员身份登录,则应用引擎会尝试禁止缓存行为。您可以通过注销或其他帐户来尝试吗?

以下是相关问题: http://code.google.com/p/googleappengine/issues/detail?id=8509

答案 1 :(得分:1)

我在使用Google App Engine for Java配置浏览器缓存和在静态文件上定义Expires标头时也遇到了一些问题。问题是web.xml中的过滤器映射否决了静态文件的配置。我在这里记录了问题和解决方案: How to set Expires headers on static files with Google App Engine。检查或共享您的web.xml文件可能会很有趣。

答案 2 :(得分:0)

它必须是Java解决方案吗?纯CSS解决方案如何避免Web请求和延迟(在第一次请求之后)?如果将所有翻转图像放在一起放在一个图像中,并将每个翻转图像(精灵)的坐标放入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一次并包含第一个精灵的几何图形。在悬停时,它会更改几何体以使用第二个精灵(同一图像)。

答案 3 :(得分:0)

如果您出于某种原因想要从servlet提供图像,那么您可以使用Jersey设置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();
}

```