メンテナンスを継承したウェブサイトがありますが、これは大きな混乱です。
私がしていることの1つは、パフォーマンスの向上です。特に、画像にExpires
ヘッダーを追加しています。
現在、PHPファイルを介して提供される画像がいくつかあり、それらにはExpires
ヘッダーがありますが、毎回読み込まれます。
応答ヘッダーを見ると、次のことがわかります。
Expires Wed, 15 Jun 2011 18:11:55 GMT
Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma no-cache
これは明らかに問題を説明しています。
今、私はコードベース全体を見てきましたが、どこにも「プラグマ」とは書かれていません。 .htaccessにも関連するものはないようです。
それらの「プラグマ」(および「キャッシュ制御」)ヘッダーを設定する可能性のあるアイデアはありますか?また、どうすればそれを回避できますか?
PHPライブラリを含まないが、PHPファイルを介して画像を提供するファイルと同じフォルダーにある単純なファイルを作成します。
file: test.php
ブラウザからこのファイルをリクエストし、ヘッダーを確認してください。不要なResponseヘッダーが表示された場合は、Apacheを介して構成されており、PHPファイルを介して生成されていないことがわかります。検索は、の.htaccessファイルに集中できます。ディレクトリツリー、およびhttp.confgおよびその他の含まれているApache構成ファイルで検索する必要があります
<Directory....
そして
<VirtualHost
あなたのサイトに適用されるかもしれないセクション。
その単純なPHPファイルのリクエストにヘッダーが表示されない場合は、PHPがヘッダーをどこかに設定していることがわかります。画像提供ファイル(または画像をエコーして終了した直後)、ただし次のPHPスニペット)
var_dump(get_included_files());
画像提供URLを介して画像をリクエストします。上記のスニペットは、リクエストで使用されたすべてのPHPファイルを出力します(ブラウザが無効な画像を報告するため、ソースを表示するか、curlを使用して生の出力を表示する必要があります)。 )
作業ファイルにファイルのサブセットを用意し、それらを検索して、
header();
関数。 header
関数は、生のPHPコードが応答ヘッダーを設定できる唯一の方法だと思います)。また、検索することもできます。
call_user_func
eval
$$
pHPのメタプログラミング機能を使用してheader
関数を呼び出す動的コードがページにある場合。
幸運を!
犯人はphp.iniである可能性があり、session.cache_limiter = nocacheです。アンチキャッシングヘッダーを回避するには、値を空白またはパブリックに変更します。
_Pragma: nocache
_でも同様の問題が発生しました
session_cache_limiter(false);
の前のsession_start();
はそれを抑制しているようでした。
.htaccess
のヘッダーの設定を解除してみてください。以下の例では、拡張子ico
、jpeg
、png
、gif
、js
、css
:
<FilesMatch "\.(ico|jpeg|png|gif|js|css)$">
Header unset Cache-Control
Header unset Pragma
</FilesMatch>
この記事 にいくつかのヒントがあります。
私はこれを実行時にこれで行いました:
header("Pragma:");
これにより、スクリプトはプラグマヘッダーの設定を解除しました。
.htaccessにない場合は、メインのApache構成ファイルにあるか、セットアップに応じてそのインクルードの1つにある可能性があります。
同様の問題を抱えている人々にとって、多くのフレームワークがヘッダー、特にキャッシュヘッダーを自動追加することは注目に値します。フレームワークライブラリまたはアプリ内でそれらをオーバーロードするのはかなり簡単です。