10

Apache の mod_expires モジュールを使用してキャッシュ ヘッダーを設定したいと考えています。私の構成は次のようになります。

<LocationMatch ^/static >
    ExpiresDefault "access plus 1 years"
</LocationMatch>

問題は、ファイルが私が制御していない 3 番目のシステムによって生成されることです。これらのシステムは、次のヘッダーを持つファイルを提供します。

Date Mon, 24 Oct 2011 08:39:02 GMT
Cache-Control no-cache,no-store,must-revalidate
Pragma no-cache
Expires Thu, 01 Dec 1994 16:00:00 GMT

これらのヘッダーにより、mod_expires でキャッシュ ヘッダーを設定できなくなります。http://httpd.apache.org/docs/2.2/mod/mod_expires.htmlで理由がわかります:

Expires ヘッダーがサーバーによって生成された応答の一部である場合 (たとえば、CGI スクリプトによって生成された場合やオリジン サーバーからプロキシされた場合)、このモジュールは Expires または Cache-Control ヘッダーを変更または追加しません。

このルールを回避してヘッダーを mod_expires で上書きする方法はありますか?

更新: この制限を回避するための 1 つの可能な解決策は、mod_headers のみを使用してキャッシュ ヘッダーを設定することです。残念ながら、値を計算する必要があるため、これは代替手段ではありません。

ありがとうございます。

4

3 に答える 3

4

残念ながら、これは既知の制限であり、 only を使用するようにフォールバックする必要がありmod_headersました。

于 2012-11-19T10:15:25.653 に答える
1

Regilero の提案は機能しません。これは、ヘッダー ディレクティブが応答処理の非常に遅い時間 (mod_expireディレクティブの後) に処理されるためです。mod_expiresしたがって、本来の目的を実行した (または実行しなかった)後に、ヘッダーの設定を解除します。

Apache 2.2 の場合はearly、各ヘッダー ディレクティブの最後に配置してみてください。これにより、応答処理の最後ではなく初期段階でこれを行うように指示されます。

だから試してください:

<LocationMatch ^/static >
  Header unset Cache-Control early
  Header unset Pragma early
  Header unset Expires early
  ExpiresDefault "access plus 1 years"
</LocationMatch>

テストしていませんが、試してみてください...

于 2011-11-18T17:06:30.037 に答える
0

mod_headersと混ぜてみましたか?

<LocationMatch ^/static >
  Header unset Cache-Control 
  Header unset Pragma
  Header unset Expires 
  ExpiresDefault "access plus 1 years"
</LocationMatch>

テストされていませんが、場合によっては...

于 2011-10-29T20:01:40.427 に答える