我的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”缓存控件取代了早期的私有缓存控件。
但是如果我再次刷新该页面,它将返回http 1.1 304 Not Modified。
答案 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();
}
```