1

奇妙なことが起こったとき、私はETags、IF_NONE_MATCHなどを使用してPHPで遊んでいました。IF_NONE_MATCH をチェックする以下のコードを書きました。ETag と一致する場合は、304 応答ヘッダーを送信します。そうでない場合は、ブラウザーにページをキャッシュするように指示する他のヘッダーと、ETag を送信します。私はページを一度取得すると、常に 304 を取得することを期待していました。代わりに、ページを 1 回取得し、次に 304、次にページ、304 などを取得しています。Chrome のヘッダー ビューを確認すると、304 コードで ETag を再度設定していなければ、そうではないことがわかりました。次にページを取得したときに、リクエストヘッダーでそれを送り返します。これは通常の動作ですか、それとも Chrome だけですか? 私は何か間違ったことをしていますか?

コードは次のとおりです。

<?php
    $etag = '89453fo245tyu5o423ty5349gu0p34';

    if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && 
                                  $_SERVER['HTTP_IF_NONE_MATCH'] == $etag) {
         header('', true, 304);
    } else {
         header('Expires: Fri, 06 Apr 2013 23:59:59 03:00 GMT');
         header('Pragma: cache');
         header('Cache-Control: public, must-revalidate, max-age=0');
         header('ETag: ' . $etag);
         echo 'new page';
    }
4

1 に答える 1