Max-ageはすべてのキャッシュに適用され、s-maxageは共有キャッシュ(プロキシおよびゲートウェイキャッシュ)にのみ適用されることを考慮してください。
両方のディレクティブを有効期限のないパブリックページで使用することは意味がありますか?
コントローラーの疑似コード:
w = Response();
w.setPublic();
w.setMaxAge("1 year");
w.setShareMaxAge("1 year");
return w;
From HTTPヘッダーフィールド定義 :
14.9.3基本的な有効期限メカニズムの変更
...
s-maxage
応答にs-maxageディレクティブが含まれている場合、共有キャッシュ(プライベートキャッシュではない)の場合、このディレクティブで指定された最大経過時間overrides max-ageディレクティブまたはExpiresヘッダーで指定された最大経過時間。
...
「オーバーライド」に注意してください。したがって、エンドユーザーが使用するmax-age
とは異なり、共有キャッシュに異なる最大経過時間を指定する場合にのみ意味があります。
特定の例では、これらは同じなので、s-maxage
を指定する必要はありません。
定義で注意すべき重要な点はshare cacheです
From HTTPヘッダーフィールド定義
14.9.3基本的な有効期限メカニズムの変更
...
s-maxage
応答にs-maxageディレクティブが含まれている場合、共有キャッシュ(ただしではないプライベートキャッシュ)の場合、このディレクティブで指定された最大経過時間overridesmax-ageディレクティブまたはExpiresヘッダーで指定された最大経過時間。
...
つまり、ニス、クラウドフロント、クラウドフレアなどのリバースプロキシ/キャッシュは、ブラウザのキャッシュとは異なるキャッシュ経過時間を持つことができます。個人的にはs-maxage
はmaxage
よりも大きい
HTTP 1.1では、応答がキャッシュされると、ブラウザにアクセスしてキャッシュを無効にすることはできませんが、CDNにそれを伝えることができます。