2012-04-09 3 views
0

У нас есть приложение, которое позволяет пользователям добавлять/редактировать/заменять/удалять контент (текст, изображения, swfs, mp3 и т. Д.). Мы хотим, чтобы администраторы всегда имели последние обновленные файлы, используя заголовок без кэша, и когда пользователь запускает приложение, все получает/использует кеш.htaccess mod_headers for no-caching

Я посмотрел в решения и попытались использовать HTML мета-теги, как:

<meta http-equiv="expires" content="0" /> 
<meta http-equiv="cache-control" content="no-cache, no-store" /> 
<meta http-equiv="pragma" content="no-cache" /> 

Но это, кажется, не быть хорошим решением, так как это происходит после того, как создаются заголовки и не меняет медиа (изображения, swfs, mp3 и т. д.).

Я хотел использовать апача, чтобы установить заголовки и наткнулся на этот код для this site:

<filesMatch "\.(html|htm|js|css)$"> 
FileETag None 
<ifModule mod_headers.c> 
Header unset ETag 
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" 
Header set Pragma "no-cache" 
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" 
</ifModule> 
</filesMatch> 

Это, кажется, большое решение, однако единственное реальное различие между тем, когда оно нам нужно кэшировать и когда его не следует кэшировать URL (preview.jsp vs run.jsp), поэтому мы не можем сопоставить его по типу файла, так как большинство файлов одинаковы.

У кого-нибудь есть хорошее решение для этого типа сценария?

Спасибо.

EDIT:

Preview.jsp и run.jsp в основном такой же, только с разной Jsp и Js обработкой. Они читают одно и то же содержимое и медиа через iframe. Например, каждый из них выглядит следующим образом:

<% 
//Some JSP 
%> 
/* HTML Headers, JS, ETC */ 
<iframe id="contentFrame" seamless="1" src="http://somedomain.com/template.html"></iframe> 
/* End HTML */ 

preview.jsp и run.jsp появляются в том же каталоге и использовать все те же ресурсы. Я ищу решение, которое имеет preview.jsp, чтобы не кэшировать что-либо, и run.jsp для кэширования.

Сервер настроен с использованием Apache Tomcat.

ответ

1

Сочетание SetEnvIf и Header может сделать трюк:

# Image, CSS and JavaScript requests normally contain the Referer header 
# which tells apache which page is requesting the resource 
# Use SetEnvIf directive to set a flag for internal uses 

SetEnvIf Referer preview\.jsp force_no_cache 

# Header directive optionally accepts env= argument 
# If present, the directive is fired if the flag is set 

Header unset ETag env=force_no_cache 

# repeat for other headers 
+0

Спасибо, похоже, это сработает. Я попробую завтра. – fanfavorite

1

Вы можете настроить соответствующие заголовки в своем сервлете Java. Apache mod_headers в основном должен работать на статические ресурсы, управляемые Apache. Хотя все, что обеспечивается серверами приложений, управляется на стороне AS.

Обычно для этой цели вы можете использовать фильтры. Вот пример: http://www.tidytutorials.com/2009/11/adding-headers-to-requests-in-filters.html

+0

Спасибо за ответ. Я довольно новичок в jsp, поэтому, пожалуйста, со мной. Соответствует ли настройка заголовков таким образом влиять на все носители на странице? Вот почему вы выбрали этот маршрут вместо простого «response.setHeader»? – fanfavorite

+0

response.setHeader влияет только на содержимое, предоставляемое JSP/Servlet. Медиаресурсы могут (и должны) иметь разные настройки кэширования. Таким образом, в основном, вы используете Apache для статических ресурсов с собственным набором параметров, а Java-приложения устанавливают заголовки кеширования только для контента, предоставляемого JSP (т.е. содержимого страницы, а не для мультимедиа). –

+0

. Моя основная проблема - кэширование медиа (изображения, mp3, swf), но поскольку в некоторых сценариях мне нужны кэшированные (производственные) и другие сценарии, мне нужно, чтобы они не кэшировались (разработка), как бы я это сделал? – fanfavorite

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