浏览器不缓存资源(标头集)

时间:2014-11-19 08:24:44

标签: java http jsf caching header

我的JEE6 / JSF / primefaces应用程序可通过https获得(双向ssl:需要服务器和用户证书)。我希望浏览器缓存资源文件,所以 资源与标题一起提供:“Cache-Control:public,max-age = 2592000”和“Expires:Fri,2014年12月19日07:46:27 GMT”(现在+ 1个月)。但是,最近的FF和IE都要求 每页上和每次刷新后的所有js / css / png文件(F5)。以下是我的请求和响应标头。我做错了什么?

Request:            GET /javax.faces.resource/primefaces.css.jsf?ln=primefaces HTTP/1.1
Accept:         text/css, */*
Referer:            https://xxxxx.yy/zz/abc.jsf?type=1
Accept-Language:    en-US
User-Agent:     Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding:    gzip, deflate
Host:           xxxxx.yy
DNT:                1
Connection:     Keep-Alive
Cookie:         ServerID=1845; JSESSIONID=Wmsmxxx!-1754822933

Response:           HTTP/1.1 200 OK
Date:               Wed, 19 Nov 2014 07:37:49 GMT
Server:             Apache
Cache-Control:      public, max-age=2592000
Pragma:             public
Expires:            Fri, 19 Dec 2014 07:46:27 GMT
Last-Modified:      Tue, 13 Nov 2012 10:02:34 GMT
X-Powered-By:       Servlet/3.0 JSP/2.2
X-Powered-By:       JSF/2.0
Keep-Alive:         timeout=15, max=100
Content-Language:   en
Connection:         Keep-Alive
Transfer-Encoding:  chunked
Content-Type:       text/css

1 个答案:

答案 0 :(得分:0)

这取决于您为哪些类型的请求启用了缓存。

检查以下两个位置以查看缓存中包含的内容 您的网址图案必须与静态内容的请求相匹配。

<filter-mapping>
    <filter-name>cache</filter-name>
    <url-pattern>*.xhtml</url-pattern>
</filter-mapping>

第二个位置是缓存过滤器本身。 例如如果您有自己的缓存过滤器,请指定正确的静态内容类型。如果您使用开箱即用的实现,那么我想web.xml会将其作为参数。

if (uri.contains(".js") || uri.contains(".css") || uri.contains(".svg") || uri.contains(".gif")
                || uri.contains(".woff") || uri.contains(".png")) {
            httpResponse.setHeader("Cache-Control", "max-age=" + maxAge);
        }

以下是我这样做的细节:
https://stackoverflow.com/a/35567540/5076414。希望这会有所帮助。