304 応答と一緒にどのヘッダーを送信すればよいですか?
-
22-08-2019 - |
質問
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応答。