[8] [CODE(HTTP)@en[[[Cache-Control:]]]] [[ヘッダー]]の 
[DFN[[CODE(HTTP)@en[[[s-maxage]]]]]] [[キャッシュ指令]]は、
[[共有キャッシュ]]における[[腐敗]]とみなすまでの[[時間]]を指定するものです。

;; [9] [[私的キャッシュ]]にも[[共有キャッシュ]]にも適用される
[CODE(HTTP)@en[[[max-age]]]] [[キャッシュ指令]]とは違って、
「max」と「age」の間に [CODE(HTTP)[[[-]]]] は入りません。

* 仕様書

[REFS[
- [7] [CITE@en[RFC 7234 - Hypertext Transfer Protocol (HTTP/1.1): Caching]] ([TIME[2014-09-11 10:19:59 +09:00]] 版) <https://tools.ietf.org/html/rfc7234#section-5.2>
-- [1] '''[CITE@en[RFC 7234 - Hypertext Transfer Protocol (HTTP/1.1): Caching]] ([TIME[2014-09-11 10:19:59 +09:00]] 版) <https://tools.ietf.org/html/rfc7234#section-5.2.2.9>'''
- [11] [CITE@en[RFC 7234 - Hypertext Transfer Protocol (HTTP/1.1): Caching]] ([TIME[2014-09-11 10:19:59 +09:00]] 版) <https://tools.ietf.org/html/rfc7234#section-4.2.4>
]REFS]

* 意味

[3] [[応答]]の [CODE(HTTP)@en[[[Cache-Control:]]]] [[ヘッダー]]の
[CODE(HTTP)@en[[[s-maxage]]]] [[キャッシュ指令]]は、
[[共有キャッシュ]]における[[齢]]の最大値を示します。これは
[CODE(HTTP)@en[[[max-age]]]] [[キャッシュ指令]]や [CODE(HTTP)@en[[[Expires:]]]]
[[ヘッダー]]により指定される[[齢]]の最大値を上書きするものです。 [SRC[>>1]]

[4] [CODE(HTTP)@en[[[s-maxage]]]] [[キャッシュ指令]]は [CODE(HTTP)@en[[[proxy-revalidate]]]]
[[キャッシュ指令]]の[[意味]]をも[RUBYB[有します]@en[imply]] [SRC[>>1]]。
この「意味」がどの意味なのか [[RFC 7234]] では曖昧ですが、旧版の [[RFC 2616]] 14.9.3
では[[腐敗応答]]を返す前に[[検証]]が必要だとの注記が添えられていて、
なぜか [[RFC 7234]] ではその部分が削除されていることがわかります。

;; [10] 仮に [CODE(HTTP)@en[[[proxy-revalidate]]]] と完全に同じ意味だとすると、
[[共有キャッシュ]]は[[再利用]]前に必ず[[検証]]しなければなりませんから、
[CODE(HTTP)@en[[[s-maxage]]]] を指定する意味はなくなってしまいます。
一方で[[腐敗応答]]を返す前に[[検証]]が必要というのも ([CODE(HTTP)@en[[[max-stale]]]]
など明示的な指定がない限り) 標準の動作ですから、一体どの部分が同じ意味なのかさっぱりわかりません。
>>11 の記述とあわせて推測すると、 [CODE(HTTP)@en[[[proxy-revalidate]]]]
と同じく [CODE(HTTP)@en[[[max-stale]]]] など他の指定があったとしても[[腐敗応答]]を送ってはならない、と解釈するべきなのかもしれません。

* 構文

[2] [[引数]]の値は[[デルタ秒]]です [SRC[>>1]]。

[FIG(railroad)[
= [[デルタ秒]]
]FIG]

[5] [[引数]]は省略できないと思われます。

[6] [[引数]]を指定する場合は、[[字句]]を[[生成]]する[['''べきです''']] [SRC[>>1]]。
[[受信者]]は[[引用文字列]]にも対応する[RUBYB[べき]@en[ought to]]です。

* 文脈

[15] [CODE(HTTP)@en[[[s-maxage]]]] は [CODE(HTTP)@en[[[Meter:]]]] [[ヘッダー]]に対応した[[計測部分木]]から外部に[[応答]]が[[転送]]される時にも使われます。

;; [CODE(HTTP)@en[[[Meter:]]]] を参照。

* 処理モデル

[12] [[満期時刻]]、[[キャッシュ再利用]]参照。

* 歴史

[14] [[RFC 2227]] は [[RFC 2616]] の出版に先立って [CODE(HTTP)@en[[[s-maxage]]]]
を利用しています [SRC[>>13]]。

[REFS[
- [13] [CITE@en[RFC 2227 - Simple Hit-Metering and Usage-Limiting for HTTP]] ([TIME[2014-08-24 16:54:52 +09:00]] 版) <http://tools.ietf.org/html/rfc2227#section-1.2>
]REFS]
