61

HTTP 応答ヘッダーのExpires: 0との違いは何ですか? RFC 2616では、無効な日付形式が定義されています。特に、値「0」既に期限切れになっているものなどがあります。ただし、一部のサーバー (例: www.google.de ) は で応答します。Expires: -1Expires: -1

-1以上を使用する利点はあり0ますか、それとも壊れた HTTP クライアントにも必要ですか?

4

3 に答える 3

33

問題は、無効な 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]代わりに使用する必要があります。

于 2012-07-06T18:38:38.360 に答える
12

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をご覧ください。

于 2015-03-10T06:02:01.850 に答える