浏览器中缓存和永久缓存的区别是什么?在GWT框架中,图像文件重命名为.cache.模式,我在谷歌网站上读到过,要使GWT配置的应用程序服务器永久缓存图像。但我不知道具体如何操作。我的网站图片不会改变,希望永久缓存它们,而不进行任何版本检查(以获得最佳性能)。 此致
浏览器中缓存和永久缓存的区别是什么?在GWT框架中,图像文件重命名为.cache.模式,我在谷歌网站上读到过,要使GWT配置的应用程序服务器永久缓存图像。但我不知道具体如何操作。我的网站图片不会改变,希望永久缓存它们,而不进行任何版本检查(以获得最佳性能)。 此致
ClientBundle
在 GWT 2.0 中引入,允许您将图像和其他资源捆绑在一个文件中,该文件永久缓存,从而减少服务器请求。
话虽如此,GWT 引入了一个称为完美缓存的概念。它通过将应用程序分成几个文件,命名为类似于 .cache.html 的文件,并且 md5 部分始终在应用程序代码或资源更改时更改来工作。然后有引导脚本,其中包含查找正确的 <md5>.cache.html
文件并加载它的逻辑。引导程序不应被缓存。
在您的应用程序服务器上,您需要进行以下配置(在此示例中为 Apache)
<Files *.nocache.*>
ExpiresDefault "access"
</Files>
<Files *.cache.*>
ExpiresDefault "now plus 1 year"
</Files>
在这种情况下,它被设置为缓存一年。据我所知,没有设置永久缓存的选项,这只意味着超长的过期时间。
就Tomcat而言,据我所知没有缓存控制,因此必须通过设置适当的HTTP标头来手动完成。这可以通过使用过滤器自动完成。
/*Please don't use this in production!*/
public class CacheFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
//cache everything for one year
response.addHeader("Cache-Control", "max-age=31556926");
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) {
this.fc = filterConfig;
}
public void destroy() {
this.fc = null;
}
}
然后在Tomcat或其衍生产品(如GlassFish)中的web.xml文件中映射过滤器:
<filter>
<filter-name>cachingFilter</filter-name>
<filter-class>CacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cachingFilter</filter-name>
<url-pattern>*.cache.*</url-pattern>
</filter-mapping>