web-dev-qa-db-ja.com

Cache-Control HTTPヘッダーにmax-ageとs-maxageを含めることは意味がありますか?

Max-ageはすべてのキャッシュに適用され、s-maxageは共有キャッシュ(プロキシおよびゲートウェイキャッシュ)にのみ適用されることを考慮してください。

両方のディレクティブを有効期限のないパブリックページで使用することは意味がありますか?

コントローラーの疑似コード:

w = Response();
w.setPublic();
w.setMaxAge("1 year");
w.setShareMaxAge("1 year");

return w;
27
unairoldan

From HTTPヘッダーフィールド定義

14.9.3基本的な有効期限メカニズムの変更

...

s-maxage

応答にs-maxageディレクティブが含まれている場合、共有キャッシュ(プライベートキャッシュではない)の場合、このディレクティブで指定された最大経過時間overrides max-ageディレクティブまたはExpiresヘッダーで指定された最大経過時間。

...

オーバーライド」に注意してください。したがって、エンドユーザーが使用するmax-ageとは異なり、共有キャッシュに異なる最大経過時間を指定する場合にのみ意味があります。

特定の例では、これらは同じなので、s-maxageを指定する必要はありません。

27
BalusC

定義で注意すべき重要な点はshare cacheです

From HTTPヘッダーフィールド定義

14.9.3基本的な有効期限メカニズムの変更

...

s-maxage

応答にs-maxageディレクティブが含まれている場合、共有キャッシュ(ただしではないプライベートキャッシュ)の場合、このディレクティブで指定された最大経過時間overridesmax-ageディレクティブまたはExpiresヘッダーで指定された最大経過時間。

...

つまり、ニス、クラウドフロント、クラウドフレアなどのリバースプロキシ/キャッシュは、ブラウザのキャッシュとは異なるキャッシュ経過時間を持つことができます。個人的にはs-maxagemaxageよりも大きい

HTTP 1.1では、応答がキャッシュされると、ブラウザにアクセスしてキャッシュを無効にすることはできませんが、CDNにそれを伝えることができます。

7
zainengineer