私のlaravel4アプリケーションの一部として小さな画像ジェネレーターがあります。画像を生成するのに約 700 ミリ秒かかるため、生成された結果をサーバーにキャッシュし、代わりにそれをブラウザーに返すことで時間を節約しました。
生成された画像は決して変更されないため、ブラウザに画像をローカルにキャッシュするように指示したかったので、次のコードでこれを行いました。
$path = $cacheFolderPath . $cacheFileName;
if (File::exists( $path )){
$response = Response::make(File::get($path));
$response->header('Content-Type', 'image/png');
$response->header('Content-Disposition', 'inline; filename="'.$cacheFileName.'"');
$response->header('Content-Transfer-Encoding', 'binary');
$response->header('Cache-Control', 'public, max-age=10800, pre-check=10800');
$response->header('Pragma', 'public');
$response->header('Expires', date(DATE_RFC822,strtotime(" 2 day")) );
$response->header('Last-Modified', date(DATE_RFC822, File::lastModified($path)) );
$response->header('Content-Length', filesize($path));
return $response;
}
これにより、ステータス コードを含む画像が200 OK
次のヘッダーとともにブラウザに送信されます。
Cache-Control:max-age=10800, pre-check=10800, public
Connection:Keep-Alive
Content-Disposition:inline; filename="pie_0_normal.png"
Content-Length:2129
Content-Transfer-Encoding:binary
Content-Type:image/png
Date:Wed, 07 Aug 2013 10:29:20 GMT
Expires:Fri, 09 Aug 13 10:29:20 +0000
Keep-Alive:timeout=5, max=93
Last-Modified:Wed, 07 Aug 13 10:14:42 +0000
Pragma:public
Server:Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7
Set-Cookie:laravel_session=767487mhf6j2btv3k01vu56174; expires=Wed, 07-Aug-2013 12:29:20 GMT; path=/; httponly
X-Powered-By:PHP/5.4.7
私の問題は、私のブラウザー (Chrome、他ではテストされていません) がまだローカルにキャッシュされたバージョンを単に取得することを拒否し、代わりにサーバーに再度アクセスすることです。
この件に関する他の質問を探すのに約30分を費やしましたが、すべての質問に答えがあり、上記のコードに組み込みました。同様の質問があることは知っていますが、これは上記のソース コードに固有のものです。
私の質問は、ブラウザによってファイルがキャッシュされない原因となる間違ったことは何ですか?