304 Not Modified
クライアントがリクエストにヘッダーを含めた場合にのみ、ヘッダーが送信されますIf-Modified-Since
。
Rewrite ルールによって与えられるオプションに応じて、常に同じ一貫した出力 (たまたま image/png) を生成する PHP スクリプトがあります。私のスクリプトでは、ANYIf-Modified-Since
がブラウザの有効なキャッシュ データを反映していると想定しているため、スクリプトには次のものが含まれます。
// If they've got it, they should use it.
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && strlen($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
header("HTTP/1.0 304 Not Modified");
exit;
}
これについてもっと賢くしたい場合は、変数を解析して、スクリプトにとって重要なものと比較できます。実行されるたびにコンテンツを動的に生成する PHP スクリプトのコンテキストで、コンテンツが変更されたかどうかを検出する方法について考える必要があります。
PHP でブラウザーのキャッシュがどのように機能するかについての追加情報については、このコメントをPHP: header
参照してください。
cURL
コマンド ラインから次のコマンドを使用して、この動作をテストできます。
[ghoti@pc ~]$ curl -sL -w "%{http_code} %{url_effective}\\n" https://www.google.com/images/srpr/logo3w.png -o /dev/null
200 https://www.google.com/images/srpr/logo3w.png
[ghoti@pc ~]$ curl -H"If-Modified-Since: Sat, 31 Dec 2011 00:00:00 GMT" -sL -w "%{http_code} %{url_effective}\\n" https://www.google.com/images/srpr/logo3w.png -o /dev/null
200 https://www.google.com/images/srpr/logo3w.png
[ghoti@pc ~]$ curl -H"If-Modified-Since: Mon, 31 Dec 2012 00:00:00 GMT" -sL -w "%{http_code} %{url_effective}\\n" https://www.google.com/images/srpr/logo3w.png -o /dev/null
304 https://www.google.com/images/srpr/logo3w.png
[ghoti@pc ~]$
異なる日付に注意してください。
十分なヘッダーが送信されていないと Chrome で考えて問題が発生した場合は、他の人気のあるサイトが提供するヘッダーの方法を複製してみてください。
[ghoti@pc ~]$ curl -H"If-Modified-Since: Mon, 31 Dec 2012 00:00:00 GMT" -sLI https://www.google.com/images/srpr/logo3w.png
HTTP/1.1 304 Not Modified
Date: Wed, 05 Dec 2012 17:40:52 GMT
Expires: Thu, 13 Dec 2012 17:40:52 GMT
Age: 241012
Server: GFE/2.0
間違いなくServer:
無視できますが、他の 3 つを含めると、Chrome からの苦情が少なくなる可能性があります。ただし、私が言ったように、動的に生成されたコンテンツをどの「年齢」と見なすかを決定するために使用する基準を考え出す必要があります.Apacheによって検出された静的ファイルのファイルシステムタイムスタンプはもはや使用できません.