2014-02-17 2 views
8

У меня проблема с кэшированием моего приложения.tomcat security-constraint impact cache

, когда этот код будет добавлен в web.xml из котом:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>HTTPSOnly</web-resource-name> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

Я получаю ответ:


Cache-Control private 
Date Tue, 18 Feb 2014 01:18:17 GMT 
Etag W/"200-1391558564593" 
Expires Thu, 01 Jan 1970 00:00:00 WET 
Server Apache-Coyote/1.1 

Без этого кода все отлично:

Accept-Ranges bytes 
Cache-Control max-age=604800 
Content-Length 1496 
Content-Type text/css 
Date Tue, 18 Feb 2014 01:21:26 GMT 
Etag W/"1496-1391558561359" 
Expires Tue, 25 Feb 2014 01:21:27 GMT 
Last-Modified Wed, 05 Feb 2014 00:02:41 GMT 
Server Apache-Coyote/1.1 

Кто-нибудь может сказать, в чем причина проблемы? и почему этот код изменяет кеш-контроль на приватное приложение. спасибо

Tomcat 7.0 
JDK : 1.6 

ответ

4

Согласно Oracle Java EE 6 tutorial, указываемый user-data-constraint из «КОНФИДЕНЦИАЛЬНО» будет использоваться

, когда приложение требует, чтобы данные передаются таким образом, чтобы препятствовать другим лицам осуществлять наблюдение за содержимое передачи.

Для ответов HTTP это означало бы, что никакие прокси-серверы/кэши по пути от сервера к клиенту не смогут кэшировать этот ответ и предоставлять любому другому запрашивающему клиенту. Таким образом, использование:

Cache-Control: private 

Хотя вы можете захотеть использовать «ИНТЕГРАЛ» вместо «КОНФИДЕНЦИАЛЬНО», тот же учебник указывает на то, что многие серверы Java EE рассматривать эти два значения одинаково.

Если ваше приложение должно разрешить кэширование, я подозреваю, что вам нужно будет удалить элемент <user-data-constraint> из вашего файла web.xml.

Надеюсь, это поможет!

1

Так что мне интересно, как мне настроить приложение tomcat для автоматического перенаправления SSL, но с сохраненным кэшированием статических ресурсов? Я имею в виду, что приложение полностью переходит через SSL, а также статические ресурсы, которые нужно кэшировать.

Кажется, что после установки <url-pattern>/*</url-pattern> или даже <url-pattern>/</url-pattern> Я не могу объявить разный url-шаблон с транспортной гарантией NONE. Все началось с моего корневого URL-адреса, теперь Cache-Control: private.

Но я нашел решение, работающее хотя бы в Tomcat 7.0.55. Эти заголовки, к счастью, установлены до обработки всего запроса, поэтому вы можете поймать их на самом первом фильтре приложений. Когда вы сбросите ответ здесь, вы можете настроить свои собственные заголовки и перезаписать существующий:

@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    response.reset(); 
    chain.doFilter(request, response); 
} 

Затем вы можете настроить, например TOMCAT ExpiresFilter в качестве второго фильтра, и здесь вы можете настроить собственные настройки кэширования.