资源首先检查未立即从缓存中检索的服务器

时间:2016-01-15 15:35:24

标签: jsf primefaces mojarra

ui中的资源:insert' s,ui:include' s不会被缓存。而我模板中定义的其他内容是。在ui:中访问的资源确实有正确的" Expires" -header,但它们也有Cache-Control:no-cache& Pragma:No-cache。 ui中没有访问的其他资源:insert和ui:include不具备此功能,如标题中的样式表和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中使用模板属性的各个页面使用此模板。

<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>

修改 未从缓存中检索的图像标题的示例。

回复标题:

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)

请求标题:

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

1 个答案:

答案 0 :(得分:1)

我发现服务器正在使用Cache-Control响应:no-cache和Pragma:no-cache,因为资源是在GlassFish Security Realm(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标头设置了值private,这很好。私有意味着只有最终用户可以缓存它而不是代理之间。