资源首先针对服务器进行检查,而不是立即从缓存中检索
Resources first checked against server not retrieved from cache right away
ui:insert、ui:include 中的资源未缓存。而我的模板中定义的其他内容是。在 ui: 中访问的资源确实具有 "Expires"-header 的权利,但它们也有 Cache-Control:no-cache
& Pragma:No-cache
。 ui:insert和ui:include中没有访问的其他资源没有这个,比如header中的样式表和js。 ui: 中的一些随机资源偶尔会从缓存中获取,例如 12 个中的 2 个。这 12 个图像的定义方式完全相同,我不明白为什么这 2 个会被缓存.
我已经想尽办法了,还是想不通。 (使用 Mojarra 2.2.12)
参数 javax.faces.PROJECT_STAGE
的值为 Production,参数 com.sun.faces.defaultResourceMaxAge
的值为 604800000。
我的 main_pages_template 示例是在 ui:composition 中的 template-attribute 的各个页面上使用此模板。
<html lang="#{localeBean.language}"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<f:view locale="#{localeBean.language}">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<h:outputStylesheet library="css" name="default.css"/>
<h:outputStylesheet library="css" name="cssLayout.css"/>
<h:outputScript library="js" name="locales.js"/>
<title><ui:insert name="title">Facelets Template</ui:insert></title>
<ui:include src="/WEB-INF/templates/favicon.xhtml" />
</h:head>
<h:body id="secure">
<div id="wrapper">
<div id="top">
<ui:include src="/WEB-INF/templates/header_template.xhtml" />
</div>
<div id="content" class="center_content">
<ui:insert name="content">Content</ui:insert>
</div>
<div id="footer">
<ui:include src="/WEB-INF/templates/footer_template.xhtml" />
</div>
</div>
</h:body>
</f:view>
编辑:
未从缓存中检索到的图像的 header 示例。
响应header秒:
Cache-Control:no-cache
Content-Length:6607
Content-Type:image/png
Date:Fri, 15 Jan 2016 15:55:26 GMT
ETag:W/"6607-1452873128742"
Expires:Sun, 14 Feb 2016 15:55:26 GMT
Last-Modified:Fri, 15 Jan 2016 15:52:08 GMT
Pragma:No-cache
Server:GlassFish Server Open Source Edition 4.0
X-Powered-By:Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition 4.0 Java/Oracle Corporation/1.8)
请求headers:
Accept:image/webp,image/*,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,nl;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Cookie:JSESSIONID=5ff7d3adafb1d4c47c82149f04c8; JSESSIONID=a56f8de3d3ad495ef464b309b91a; treeForm_tree-hi=treeForm:tree:resources:mailResources
Host:localhost:8080
If-Modified-Since:Fri, 15 Jan 2016 15:52:08 GMT
If-None-Match:W/"6607-1452873128742"
Referer:http://localhost:8080/webapp/secure/profile
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
我发现服务器正在响应 Cache-Control: no-cache 和 Pragma: no-cache 因为资源是在 GlassFish 安全领域定义的安全页面上访问的(j_security_check).
为了解决这个问题,我在这里实施了解决方案:Static resources are not cached referenced from glassfish secure page
我在 glassfish-web.xml 中添加了 <property name="securePagesWithPragma" value="false" />
作为 属性 来自 glassfish-web-app
。现在只有 Cache-Control header 设置了 private
的值,这很好。私有意味着只有最终用户可以缓存它,而不是在代理之间。
ui:insert、ui:include 中的资源未缓存。而我的模板中定义的其他内容是。在 ui: 中访问的资源确实具有 "Expires"-header 的权利,但它们也有 Cache-Control:no-cache
& Pragma:No-cache
。 ui:insert和ui:include中没有访问的其他资源没有这个,比如header中的样式表和js。 ui: 中的一些随机资源偶尔会从缓存中获取,例如 12 个中的 2 个。这 12 个图像的定义方式完全相同,我不明白为什么这 2 个会被缓存.
我已经想尽办法了,还是想不通。 (使用 Mojarra 2.2.12)
参数 javax.faces.PROJECT_STAGE
的值为 Production,参数 com.sun.faces.defaultResourceMaxAge
的值为 604800000。
我的 main_pages_template 示例是在 ui:composition 中的 template-attribute 的各个页面上使用此模板。
<html lang="#{localeBean.language}"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<f:view locale="#{localeBean.language}">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<h:outputStylesheet library="css" name="default.css"/>
<h:outputStylesheet library="css" name="cssLayout.css"/>
<h:outputScript library="js" name="locales.js"/>
<title><ui:insert name="title">Facelets Template</ui:insert></title>
<ui:include src="/WEB-INF/templates/favicon.xhtml" />
</h:head>
<h:body id="secure">
<div id="wrapper">
<div id="top">
<ui:include src="/WEB-INF/templates/header_template.xhtml" />
</div>
<div id="content" class="center_content">
<ui:insert name="content">Content</ui:insert>
</div>
<div id="footer">
<ui:include src="/WEB-INF/templates/footer_template.xhtml" />
</div>
</div>
</h:body>
</f:view>
编辑: 未从缓存中检索到的图像的 header 示例。
响应header秒:
Cache-Control:no-cache
Content-Length:6607
Content-Type:image/png
Date:Fri, 15 Jan 2016 15:55:26 GMT
ETag:W/"6607-1452873128742"
Expires:Sun, 14 Feb 2016 15:55:26 GMT
Last-Modified:Fri, 15 Jan 2016 15:52:08 GMT
Pragma:No-cache
Server:GlassFish Server Open Source Edition 4.0
X-Powered-By:Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition 4.0 Java/Oracle Corporation/1.8)
请求headers:
Accept:image/webp,image/*,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,nl;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Cookie:JSESSIONID=5ff7d3adafb1d4c47c82149f04c8; JSESSIONID=a56f8de3d3ad495ef464b309b91a; treeForm_tree-hi=treeForm:tree:resources:mailResources
Host:localhost:8080
If-Modified-Since:Fri, 15 Jan 2016 15:52:08 GMT
If-None-Match:W/"6607-1452873128742"
Referer:http://localhost:8080/webapp/secure/profile
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
我发现服务器正在响应 Cache-Control: no-cache 和 Pragma: no-cache 因为资源是在 GlassFish 安全领域定义的安全页面上访问的(j_security_check).
为了解决这个问题,我在这里实施了解决方案:Static resources are not cached referenced from glassfish secure page
我在 glassfish-web.xml 中添加了 <property name="securePagesWithPragma" value="false" />
作为 属性 来自 glassfish-web-app
。现在只有 Cache-Control header 设置了 private
的值,这很好。私有意味着只有最终用户可以缓存它,而不是在代理之间。