質問

304 応答を送信したとき。ブラウザは 304 と一緒に送信する他のヘッダーをどのように解釈しますか?

例えば。

header("HTTP/1.1 304 Not Modified");
header("Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT");

これにより、ブラウザは $offset 時間が「なくなる」まで別の条件付き GET リクエスト (またはリクエスト) を送信しないようになりますか?

また、他のヘッダーについてはどうですか?

304 と一緒に次のようなヘッダーを送信する必要があります:

header('Content-Type: text/html');

次のものを送信する必要がありますか?

header("Last-Modified:" . $modified);
header('Etag: ' . $etag);

次回 $offset が「使い果たされた」ときにブラウザが条件付き GET リクエストを送信するようにするには、それとも単に古い Last Modified 値と Etag 値を保存するだけですか?

304 応答ヘッダーを送信するときに他に注意すべきことはありますか?

役に立ちましたか?

解決

このブログ記事で「条件付きGET」獣を飼いならすために私をたくさん助けました。

興味深い抜粋(一部ベンの答えと矛盾する)のように述べている:

  正常応答がETagヘッダが含まれているであろう場合に、そのヘッダはまた、304応答に含まれなければならない

     それらの値は、前の応答で送信されたものと異なる可能性がある場合、

キャッシュ・ヘッダーは、(キャッシュ・コントロール、有効期限、及び/又は異なります)。

これは RFCと完全従ったものです2616秒10.3.5 に。

<時間>

200要求の下に...

HTTP/1.1 200 OK
Server: nginx/0.8.52
Date: Thu, 18 Nov 2010 16:04:38 GMT
Content-Type: image/png
Last-Modified: Thu, 15 Oct 2009 02:04:11 GMT
Expires: Thu, 31 Dec 2010 02:04:11 GMT
Cache-Control: max-age=315360000
Accept-Ranges: bytes
Content-Length: 6394
Via: 1.1 proxyIR.my.corporate.proxy.name:8080 (IronPort-WSA/6.3.3-015)
Connection: keep-alive
Proxy-Connection: keep-alive
X-Junk: xxxxxxxxxxxxxxxx

...そして、その最適な有効304相手方ます。

HTTP/1.1 304 Not Modified
Server: nginx/0.8.52
Date: Thu, 18 Nov 2010 16:10:35 GMT
Expires: Thu, 31 Dec 2011 16:10:35 GMT
Cache-Control: max-age=315360000
Via: 1.1 proxyIR.my.corporate.proxy.name:8080 (IronPort-WSA/6.3.3-015)
Connection: keep-alive
Proxy-Connection: keep-alive
X-Junk: xxxxxxxxxxx
Expiresヘッダはごとに最もCurrent Date + One Yearであること

お知らせRFC-2616 14.21 のます。

他のヒント

Content-Type ヘッダーは本文を含む応答にのみ適用されます。304 応答は次のことを行います ない 本文が含まれているため、ヘッダーは適用されません。同様に、送信したくない場合は、 Last-Modified または ETag 304 応答はドキュメントが変更されていないことを意味するためです (したがって、これら 2 つのヘッダーの値もどちらも持っていません)。

例については、を参照してください。 Anne van Kesteren によるこのブログ投稿 検査する ワードプレス' http_modified 関数。返されることに注意してください どちらか Last-Modified そして ETag または 304応答。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top