2

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

我不知道如何处理这个问题。请帮忙(Java解决方案)?

已编辑 ==>

应用引擎.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 个缓存控制...我猜“无缓存”缓存控制取代了早期的私有缓存控制。

响应头 1

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

响应标头2

4

4 回答 4

5

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

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

于 2013-03-05T07:12:37.480 回答
1

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

于 2013-06-04T23:03:27.227 回答
0

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

于 2013-06-05T00:08:40.907 回答
0

如果您出于某种原因想从 servlet 提供图像,那么您可以cache-control使用 Jersey 设置响应标头:

@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();
}

```

于 2018-01-23T12:16:48.943 回答