[10] [CODE(HTTP)@en[[[Cache-Control:]]]] [[ヘッダー]]の
[DFN[[CODE(HTTP)@en[[[must-revalidate]]]]]] [[キャッシュ指令]]と
[DFN[[CODE(HTTP)@en[[[proxy-revalidate]]]]]] [[キャッシュ指令]]は、
[[キャッシュ再利用]]にあたり[[検証]]が必要なことを表します。
前者はすべての[[キャッシュ]]に、後者は[[共有キャッシュ]]に適用されます。

* 仕様書

[REFS[
- [5] [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.1>'''
-- [8] [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.7>
]REFS]

* 意味

[2] [[応答]]の [CODE(HTTP)@en[[[Cache-Control:]]]] [[ヘッダー]]の
[CODE(HTTP)@en[[[must-revalidate]]]] [[キャッシュ指令]]は、
[[腐敗]]後、
[[キャッシュ]]が以後当該[[応答]]を[[検証]]せずに[[再利用]]しては[['''ならない''']]ことを示します [SRC[>>1]]。

[9] [[応答]]の [CODE(HTTP)@en[[[Cache-Control:]]]] [[ヘッダー]]の
[CODE(HTTP)@en[[[proxy-revalidate]]]] [[キャッシュ指令]]は、
[[腐敗]]後、
[[共有キャッシュ]]が以後当該[[応答]]を[[検証]]せずに[[再利用]]しては[['''ならない''']]ことを示します [SRC[>>1, >>8]]。

;; [11] [CODE(HTTP)@en[[[proxy-revalidate]]]] は、 
[CODE(HTTP)@en[[[Cache-Control:]] [[public]]]] と併用して、
認証済みの[[クライアント]]に対する[[応答]]を[[私的キャッシュ]]にはただちに[[再利用]]可能な形で[[キャッシュ]]させつつ、
[[共有キャッシュ]]には[[検証]]が必要な形で[[キャッシュ]]させることを想定しています
[SRC[[[RFC 2616]] 14.9.4]]。

;; [13] [CODE[no-cache]] と似ていますが、 [CODE[must-revalidate]]
には[[腐敗]]後という条件がついています。

* 構文

[7] [[引数]]は使えません [SRC[>>5]]。

* 文脈

[14] 
[[HTTP応答]]の [CODE(HTTP)@en[Cache-Control:]] [[ヘッダー]]に指定できます。

[6] [CODE(HTTP)@en[[[must-revalidate]]]]/[CODE(HTTP)@en[[[proxy-revalidate]]]]
[[キャッシュ指令]]は、
[[検証]]に失敗したら誤った操作につながる場合に限って利用する[RUBYB[べき]@en[ought to]]です
[SRC[>>1]]。

* 処理

[3] [[キャッシュ]]は [CODE(HTTP)@en[[[must-revalidate]]]]/[CODE(HTTP)@en[[[proxy-revalidate]]]]
に常に従わなければ[['''なりません''']]。
何らかの理由で[[起源鯖]]に到達できない時は、 [CODE(HTTP)[[[504]]]]
[[応答]]を[[生成]]しなければ[['''なりません''']]。 [SRC[>>1]]

;; [4] [[キャッシュ再利用]]も参照。

* メモ

[12] [CITE[http - Difference between no-cache and must-revalidate - Stack Overflow]]
([TIME[2017-06-27 13:05:18 +09:00]])
<https://stackoverflow.com/questions/18148884/difference-between-no-cache-and-must-revalidate>