2016-11-21 6 views
3

http応答ヘッダー内のAccess-Control-Max-AgeとCache-Controlの違いは何ですか?アクセス制御 - 最大有効期限とキャッシュ制御

Access-Control-Max-Age:1728000 
Cache-Control:max-age=21600, public 

私は、彼らは同じことを頻繁に示すのではなく、時には異なる価値を持っていると感じています。

の場合はどちらもhttpヘッダーに表示されますが、値が異なる場合は有効ですか?

答えて

8

http応答ヘッダー内のAccess-Control-Max-AgeとCache-Controlの違いは何ですか?

これらのヘッダーは、異なるコンテキストで、様々な目的のために使用される:

  • Cache-Controlリソースが新鮮考える時間の最大量を指定するために、広い一般的な文脈で使用されます。

  • Access-Control-Max-Ageは、CORS preflight requestsで使用されます。プリフライトリクエストの結果をキャッシュできる期間を示します。この場合の結果は、Access-Control-Allow-MethodsAccess-Control-Allow-Headersヘッダーの内容になります。

つまり、これらの値はさまざまなものの新鮮さに関係します。 Cache-Controlmax-age=はダウンロードされたリソースのため、 Access-Control-Max-Ageは他のヘッダーフィールドのコンテンツ用です。

私は、同じことを頻繁に一緒に表示したり、時には異なる値で表示していると感じています。

すでに説明したように、それらはまったく異なるものを指します。 それらを一緒に見ることは、たぶん偶然の一致です。 設定可能な場合は、通常Cache-Controlmax-ageを設定することをお勧めします。 Access-Control-Max-Ageを設定することは非常に重要ではないようですが、 ブラウザでは分かりやすい既定値が設定される可能性があります。

両方ともhttpヘッダーに表示されますが、値が異なる場合は有効ですか?

これらのヘッダーは無関係であるため、 これは有効です。 あなたの例ではAccess-Control-Max-Age: 1728000の値がちょっと変わっていますが、ブラウザではこれを通常はもっと小さな値に制限しています( )(Firefoxは24時間(86400秒)、Chromiumは10分(600秒))。 Chromiumではデフォルト値の5秒も指定されています。 @Filipposによって

補遺:

は、アクセス・コントロール・最大年齢のみHTTPオプションを使用するプリフライトリクエストに(有意に)使用することができることに留意されたいです。同時に、HTTP仕様(RFC 7231)ではHTTP OPTIONS要求(「OPTIONSメソッドへの応答はキャッシュ不可」)でのキャッシュが許可されていません。したがって、本質的にHTTPオプションの場合、Access-Control-Max-年齢

+0

例のドメインにはいくつかのクロスドメインリソースがホストされているかもしれませんが、問題のリソースではなくすべてのhttp応答にAccess Controlヘッダーが表示されています。私はAccess Controlヘッダーが標準の非共有リソースに表示されることを期待していなかったので、文脈を逸して私を投げ捨てました。洞察に感謝します! – Radderz

+0

また、Access-Control-Max-Ageは、HTTP OPTIONSを使用するプリフライトリクエストでのみ(有意義に)使用できます。同時に、HTTP仕様(RFC 7231)ではHTTP OPTIONS要求(「OPTIONSメソッドへの応答はキャッシュ不可」)でのキャッシュが許可されていません。したがって、本質的にHTTPオプションの場合、Access-Control-Max-年齢。 – Filippos

+0

良い点、ありがとう@Filippos – janos

関連する問題