2012-04-09 6 views
0

私たちはユーザがコンテンツ(テキスト、画像、swf、mp3など)を追加/編集/置換/削除できるアプリケーションを持っています。管理者は、キャッシュされていないヘッダーを使用して最新の更新ファイルを常に入手し、ユーザーがアプリケーションを実行するとすべてがキャッシュを取得/使用するようにします。htaccess no-cachingのためのmod_headers

は私が解決策に見ていると同様にHTMLのMETAタグを使用して試してみました:

<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など)ヘッダ。

私はヘッダーを設定するようにApacheを使用したいと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と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

SetEnvIfHeaderの組み合わせは、トリックを行う可能性があります:レスポンスのための

# 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

私の主な問題は、いくつかのシナリオではキャッシュされた(プロダクション)シナリオとキャッシュされない(開発された)シナリオが必要なので、どうやってこれをやりますか? – fanfavorite

関連する問題