Вопрос по primefaces, jsf-2 – JSF2 Кэширование статических ресурсов

3

Glassfish 3.1.2, Мохарра 2.1.6, SSL активирован

У меня есть вопрос о статическом кэшировании ресурсов. Я прочитал несколько сообщений об этом, но я не уверен, какие варианты мы должны использовать. это

https://developers.google.com/speed/docs/best-practices/caching

также хорошая статья о кешировании ресурсов. На нашем сервере приложений SSL активирован. Мы видим, что статические ресурсы (изображения, скрипты, CSS) не кэшируются.

Вот мой тестовый фильтр:

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        String uri = httpRequest.getRequestURI();
        if (GET_METHOD.equalsIgnoreCase(httpRequest.getMethod()) && uri.contains(ResourceHandler.RESOURCE_IDENTIFIER)) {
            httpResponse.setDateHeader("Expires", System.currentTimeMillis() + 2419200000L); // 1 month in future.
            httpResponse.setDateHeader("Last-Modified", System.currentTimeMillis() - 2419200000L); // 1 month in past.
            httpResponse.setHeader("Cache-Control", "public"); // Secure caching
        }
    }
    chain.doFilter(request, response);
}
Expires: Ok. It´s an static resource that doesn´t change, so we set the expiration date one month in the future. Last Modified: Not sure. I´ve read that setting this to the past has also impaces on caching Cache-Control: Ok. Allow secure caching. Security impacts?

Есть ли какие-либо воздействия с этими настройками? Я также прочитал много постов, где кеширование должно быть отключено через фильтр. Единственная проблема, которую я вижу, заключается в том, что у пользователей могут возникнуть проблемы с новой версией. Стили и сценарии могут быть изменены в новом выпуске, но браузер игнорирует новый и использует файлы из кэша.

Ваш Ответ

1   ответ
7

Вам нужно только установитьCache-Control,Expires а такжеLast-Modified являютсяalready установлен по умолчаниюResourceHandler (и переопределяет значения, установленные вашим фильтром).Last-Modified должен представлять последнюю измененную временную метку рассматриваемого ресурса. Вы можете получить его поservletContext.getResource(path).openConnection().getLastModified(), Но вам все равно не нужно устанавливать его здесь. Просто дайResourceHandler справиться.

Что касается управления версиями, просто используйте библиотеки ресурсов правильно. Вы можете поместить папку версии, соответствующую шаблону регулярных выражений\d+(_\d+)* в папке библиотеки иResourceHandler будет служить новейшим.

Например.

/resources/libraryname/1_0/js/file.js
/resources/libraryname/1_1/js/file.js
/resources/libraryname/1_2/js/file.js

Следующий получит тот из1_2:

<h:outputScript library="libraryname" name="js/file.js" />

Похожие вопросы