[11] [CODE(HTTP)@en[[[Cache-Control:]]]] [[ヘッダー]]の
[DFN[[CODE(HTTP)@en[[[private]]]]]] [[キャッシュ指令]]は、
[[共有キャッシュ]]が[[蓄積]]してはならないことを表します。

* 仕様書

[REFS[
- [2] [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.6>'''
]REFS]

* 意味

[3] [[応答]]の [CODE(HTTP)@en[[[Cache-Control:]]]] [[ヘッダー]]の
[CODE(HTTP)@en[[[private]]]] [[キャッシュ指令]]は、
[[応答メッセージ]]が単一[[利用者]]に向けたものであり、
[[共有キャッシュ]]が[[蓄積]]しては[['''ならない''']]ことを表します [SRC[>>1]]。

[14] 一方[[私的キャッシュ]]は (本来[[キャッシュ可能]]ではないとしても)
[[キャッシュ可能]]となります。

* 構文

[6] [[引数]]を指定してもしなくても構いません [SRC[>>1]]。
指定する場合は[[引用文字列]]を[[生成]]する[['''べきです''']] [SRC[>>1]]。
[[受信者]]は[[字句]]でも[[引用文字列]]でも対応する[RUBYB[べき]@en[ought to]]です [SRC[>>2]]。

[7] [[引数]]の値は[[ヘッダー名]]の[[リスト]] ([CODE(HTTP)[#]]) です [SRC[>>1]]。
[[大文字・小文字不区別]]です [SRC[>>1]]。

[FIG(railroad)[
= ?
== [[ヘッダー名]]
== *
=== [[OWS]]
=== [CODE(HTTP)[[[,]]]]
=== [[OWS]]
=== [[ヘッダー名]]
]FIG]

* 処理モデル

[4] [[共有キャッシュ]]は[[ヘッダー名]]が指定されていない場合、
[[応答]]を[[蓄積]]しては[['''なりません''']] [SRC[>>1]]。

[8] [[共有キャッシュ]]は[[ヘッダー名]]が指定されている場合、
[[応答]]のうち指定された[[ヘッダー]]以外を[[蓄積]]して構いません [SRC[>>1]]。

;; [9] [[引数]]が[[空文字列]]の場合にどちらと解釈されるのかは不明です。

[5] [[私的キャッシュ]]は通常[[キャッシュ可能]]でないとしても、
[[応答]]を[[蓄積]]して[[再利用]]して構いません [SRC[>>1]]。

;; [13] [[キャッシュ可能性]]を参照。

* 実装

[10] 実装によっては[[ヘッダー名]]が指定されていても無視して、
[[ヘッダー名]]なしの指定と同じように扱います [SRC[>>1]]。

[12] [[利用者]]ごとに異なる[[文書]]を返す [[Webアプリケーション]]では、
[[逆串]]や[[串]]にそのような[[文書]]を[[キャッシュ]]させず、
[[利用者エージェント]]には[[キャッシュ]]させるためにこの[[キャッシュ指令]]を使うことがよくあります。

* メモ

[15] [[ログイン]]が必要なページが[[串]]にキャッシュされないように指定しておくと良さそうです。
([CODE(HTTP)@en[[[no-store]]]] や [CODE(HTTP)@en[[[no-cache]]]] だと[[Webブラウザー]]も[[キャッシュ]]できなくなってしまいます。)

[16] なお、通常なら[[蓄積]]されないような[[状態符号]]のエラー応答まで[[蓄積]]されてしまう可能性があるので、注意が必要です。
