0

オブジェクトが有効かどうかをWebサーバーに尋ねることなく、キャッシュから直接ロードして、いくつかの埋め込みオブジェクトのリクエストを回避できるかどうかを理解しようとしています(304 httpステータスでWebサーバーの応答を望まない)コード)それは可能ですか?期限切れヘッダーはこのように機能しますか? どのように?


もちろん: リクエスト:

<script scr="my_js.php"></script> 

応答:

<? header("HTTP/1.1 304 Not Modified");
header("Expires: Mon, 31 Dec 2035 12:00:00 gmt");
header("Cache-Control: max-age=".(60*60*24*365)); 
echo "//this is a simpe example"; ?>

解決済み

ブラウザは、ページを初めて開いたとき(新しいタブまたは新しいブラウザ ウィンドウ) にのみ、Web サーバーに要求せずにキャッシュからリソースを読み込みます。

それ以外の場合、ブラウザは常にキャッシュに保存されているリソースに関する情報をサーバーに要求します。次に、Web サーバーは 200 または 301 で応答します。

4

2 に答える 2

2

はい、遠い有効期限ヘッダーを設定すると、有効期限が切れるまでアセットは再度ダウンロードされません。

Last-Modified および ETag ヘッダーを削除すると、If-Modified-Since および If-None-Match 要求とそれらの 304 Not Modified Response が完全に排除されるため、Expires ヘッダーが新しいことを示すまで、ファイルは更新をチェックせずにキャッシュされたままになります。コンテンツが利用可能です!

ソース

于 2011-06-19T23:08:20.213 に答える
0

私のhtaccessから...

<IfModule mod_headers.c>

    Header unset Pragma
    FileETag None
    Header unset ETag

    # cache images/pdf docs for 10 days
    <FilesMatch "\.(ico|pdf|jpg|jpeg|png|gif|js)$">

      Header set Expires "Mon, 31 Dec 2035 12:00:00 gmt"
      Header unset ETag  
      Header unset Last-Modified

    </FilesMatch>

    # cache html/htm/xml/txt diles for 2 days
    <FilesMatch "\.(html|htm|xml|txt|xsl)$">
      Header set Cache-Control "max-age=7200, must-revalidate"
    </FilesMatch>

</IfModule>

動作しないようです....たとえば、firebugのネットパネルは常に200ステータスコードを表示し、access.logファイルは、外部オブジェクトが常にブラウザーによって要求されていることを報告します。

于 2011-06-20T20:26:48.693 に答える