2016-01-15 5 views
1

Ресурсы, которые находятся в файле ui: insert, ui: include, не кэшируются. В то время как другой материал, определенный в моем шаблоне, есть. Ресурсы, которые доступны в ui: s, имеют право «Expires» -header, но они также имеют Cache-Control:no-cache & Pragma:No-cache. Другие ресурсы, которые не доступны в ii: insert и ui: include, не имеют этого, как таблицы стилей и js в заголовке. Время от времени некоторые случайные ресурсы в ii: получаются из кеша, как 2 из 12. И эти 12 изображений определяются точно так же, я не понимаю, почему эти 2 будут кэшироваться.Ресурсы, сначала проверенные на сервере, которые не были получены из кэша сразу

Я пробовал все, что могу, и не могу понять. (Mojarra 2.2.12 используется)

Пары javax.faces.PROJECT_STAGE имеют значение Производства и параметры com.sun.faces.defaultResourceMaxAge имеют 604800000.

Пример моей main_pages_template, которое использует этот шаблон на различных страницах с шаблоном-атрибутом в пользовательском интерфейсе :состав.

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

Edit: Expample из заголовков изображения, которые не извлекаются из кэша.

заголовки отклика:

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

Какой тип/версия JSF? Пробовал последние, чтобы исключить длительную исправленную ошибку из-за причины? GlassFish 4.0 довольно старый. – BalusC

+0

Приложение использует JSF 2.2. –

+0

Я прямо спросил, какой JSF impl/version. «JSF 2.2» - это только версия спецификации. Есть 2 основных разработчика, Mojarra и MyFaces, которые, в свою очередь, имеют различные версии 2.2.x. Последние 2.2.12 соответственно 2.2.9. Вы их пробовали? – BalusC

ответ

1

Я понял, что сервер не реагирует с Cache-Control: нет кэша и Pragma: нет-кэша, потому что ресурсы были доступ на защищенной странице, которая была определена областью безопасности GlassFish (j_security_check).

Чтобы решить эту проблему, я implementend решения здесь: Static resources are not cached referenced from glassfish secure page

Я добавил <property name="securePagesWithPragma" value="false" /> как свойство от glassfish-web-app в GlassFish-web.xml. Теперь задан только заголовок Cache-Control со значением, private, который в порядке. Частное означает, что только конечный пользователь может кэшировать его, а не промежуточный прокси.

+0

Это не поведение по умолчанию. Что-то еще в вашем webapp или даже самом сервере устанавливает эти заголовки без кеша. Так что вы сделали всего лишь обходной путь, а не решение. – BalusC

+0

@BalusC Может ли быть так, потому что эти ресурсы доступны из защищенных страниц (ограничение безопасности)? Я использую GlassFish Security Realm (j_security_check). Это имеет смысл, потому что на странице входа, которая является общедоступной, у меня, похоже, нет проблем с кешированием. Может ли это быть связано с этим http://stackoverflow.com/questions/5468099/static-resources-are-not-cached-referenced-from-glassfish-secure-page/5482987#5482987? –

+0

Я думаю, что это так, но, по поиску в Интернете, я не могу найти, в каком месте в моем glassfish-web.xml я должен поместить его. Когда я вернусь на работу завтра, я просто попробую добавить '' в качестве дочернего для веб-приложения Glassfish. –

 Смежные вопросы

  • Нет связанных вопросов^_^