HTTP 応答ヘッダーのExpires: 0
との違いは何ですか? RFC 2616では、無効な日付形式が定義されています。特に、値「0」が既に期限切れになっているものなどがあります。ただし、一部のサーバー (例: www.google.de ) は で応答します。Expires: -1
Expires: -1
-1
以上を使用する利点はあり0
ますか、それとも壊れた HTTP クライアントにも必要ですか?
HTTP 応答ヘッダーのExpires: 0
との違いは何ですか? RFC 2616では、無効な日付形式が定義されています。特に、値「0」が既に期限切れになっているものなどがあります。ただし、一部のサーバー (例: www.google.de ) は で応答します。Expires: -1
Expires: -1
-1
以上を使用する利点はあり0
ますか、それとも壊れた HTTP クライアントにも必要ですか?
問題は、無効な Expires ヘッダーが Internet Explorer (特に古いバージョン) によって処理される方法にあります。IE は、Tridentレイアウト エンジンとWinINET API を使用して HTTP 要求を処理します。ご存じのとおり、Expires は HTTP ヘッダーで指定できます
Expires: 0
またはメタタグで
<meta http-equiv="Expires" content="0">
2 番目のケースでは、 Expires は (ヘッダー コンテンツではなく) 応答コンテンツの一部になったため、Trident によって処理されてから WinINET に伝達されます。
WinINET が無効な Expires ヘッダー (有効な HTTPDATE 値を含まないヘッダーなど) を含む応答をダウンロードし、他のキャッシュ ディレクティブがない場合、ドキュメントは 1 時間前に期限切れになったものとしてマークされます。ただし、トライデントにはそのようなロジックはありません。無効な時間を指定すると、Trident は現在のタイムスタンプを取得し、それを有効期限として使用します。Trident は、Pragma: no-cache ディレクティブに遭遇した場合、現在のタイムスタンプも使用します。HTTP/404 が処理されたのとまったく同じ秒の間にユーザーが現在のドキュメントに再度移動しようとすると、既存のキャッシュ エントリの有効期限が誤って更新され、その要求に対して新しいものとして扱われます。ユーザーが [更新] ボタンまたは F5 キーを押すと、キャッシュがバイパスされ、404 ページが表示されます。
つまりExpires: 0
、常にすぐにリソースが期限切れになるとは限らないため、回避し、Expires: [some valid date in the past]
代わりに使用する必要があります。
Expires: -1 Expires ヘッダーは、コンテンツが期限切れと見なされる時期を指定します。値 -1 は、コンテンツがすぐに期限切れになり、再度表示する前に再要求する必要があることを示します。 http://www.httpwatch.com/httpgallery/headers/
max-age=0 は、応答が最初から古くなっていることをキャッシュ (およびユーザー エージェント) に伝えるだけなので、キャッシュされたコピーを使用する前に (If-Not-Modified ヘッダーなどを使用して) 応答を再検証する必要があります。 -cache は、キャッシュされたコピーを使用する前に再検証する必要があることを伝えます。
詳細については、http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdfをご覧ください。