2016-11-06 5 views
1

静的ファイル(パス:mystaticfile.js.phpなど)を構成オプションで変更できるようにするため、静的なjavascriptファイルがPHPによって生成されるアプリケーションがあります。キャッシュ設定が機能しなくなり、これらのリソースがすべてのページの読み込み時に再読み込みされていることを除いて、すべてうまく動作します。PHPファイルのキャッシュヘッダーが機能しない

PHPファイルはキャッシュの設定を設定しようとする次のヘッダーを使用しています、

$expires= 60 * 60 * 24 * 60; //cache for 60 days 
header('Pragma: public'); 
header('Cache-Control: max-age=' . $expires); 
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $expires) . ' GMT'); 
header("content-type: application/x-javascript"); 

ただし、ファイルが提供されている場合、それらがどのように見えるのヘッダー見せている:

HTTP/1.1 200 OK 
Date: Sun, 06 Nov 2016 19:18:00 GMT 
Server: Apache/2.2.15 (CentOS) 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Vary: Accept-Encoding 
Content-Encoding: gzip 
Content-Length: 744 
Keep-Alive: timeout=15, max=95 
Connection: Keep-Alive 
Content-Type: application/x-javascript 

私を最初に考えたのは、ApacheにはExpiresActiveフラグが設定されているが、PHPファイルにはExpiresByTypeのルールが設定されていないためです。

オンライン読み、それは問題になる可能性がETagの問題のように聞こえるが、私はhttp.confファイルに

Header unset Pragma 
FileETag None 
Header unset ETag 

を追加しました(し、サービスの再起動)し、まだサイコロをしました。

どのような考えですか?

+0

どのブラウザがそう – nogad

+0

が、それは何の違いを作るべきではありません@nogadことをキャッシュし.jsファイル。ヘッダーが設定され、ブラウザーはそれらをJSファイルとして認識します。問題は、ブラウザがphpによってヘッダが設定されているにもかかわらず、キャッシュしないように指示されていることです。 –

+0

ヘッダ( 'header( 'Foo:bar');')を追加してみてください。適用されますか? –

答えて

1

出典:PHP: Worry about some magical added “Cache-Control” Header ?

これらのヘッダは自動的に にPHP Session moduleによって設定されているが、あなたのページのブラウザ/プロキシベースのキャッシングを防ぎます。あなたの 環境設定によっては、ドキュメントに記載さだけ session_cache_limiter()関数に空の文字列を渡し session_cache_limiter()機能を使って、これらのヘッダを制御したり、これらの動作を無効にするにはphp.iniの

を使用することが可能です。

*それらを作る程度
session_cache_limiter(''); 
関連する問題