0

私の Web サイトでは、ページの読み込み中に一部の JavaScript が画面の解像度を検出し、次のコードを使用して本文の背景を URL に設定します。

var url = "http://site.com/get_background/" + width + "/" + height;

var body=document.getElementsByTagName('body')[0];            

body.style.background = "#000000 url(" + url + ") fixed top center";

urlget_background/では、次の PHP コードを使用して画像が提供されます。

     $etag = md5_file($image);
     $lastModified = gmdate('D, d M Y H:i:s', filemtime($image)) . ' GMT';

     header("Content-type: $mime");
     header("ETag: \"{$etag}\"");
     header("Last-Modified: $lastModified");
     header('Cache-Control: max-age=28800');

     $image = readfile($image);
     imagejpeg($image);

    imagejpeg($image);

Firefox では、これはすべて期待どおりに機能します。ただし、Chrome では、このサイトのページが読み込まれるたびに、画像がキャッシュされて提供されるだけでなく、もう一度読み込まれるように見えます。

背景を設定するコードを外部のcssファイルに移動すると、Chromeで期待どおりに機能しますが、javascriptに配置すると、Chromeが画像を更新するようです。

私はそれについて何をすべきですか?画面解像度は JavaScript を介して検出する必要があるため、コードを JS に配置する必要があります。javascriptを介してロードされているにもかかわらず、クロムに画像を強制的にキャッシュさせる方法はありますか?

4

1 に答える 1

1

応答を正常にキャッシュするExpiresには、最初の応答でヘッダーを設定する必要があり、次の応答でHTTP_IF_MODIFIED_SINCE要求ヘッダーの存在を確認する必要があります。

存在する場合は、次のように応答する必要があります304

詳細については、http://dtbaker.com.au/random-bits/how-to-cache-images-generated-by-php.htmlを参照してください。

于 2012-09-03T23:20:20.813 に答える