[17] Cache-Control:
ヘッダーの
no-cache
キャッシュ指令は、
検証なしに蓄積された応答を再利用してはならないことを表します。
このキャッシュ指令は要求でも応答でも利用できます。
[2] 要求の Cache-Control:
ヘッダーにおける
no-cache
キャッシュ指令は、
キャッシュが起源鯖により検証することなしに既に蓄積された応答を再利用してはならないことを示します
>>1。
[8] 応答の Cache-Control:
ヘッダーにおける
no-cache
キャッシュ指令は、
キャッシュが起源鯖により検証することなしに蓄積された応答として再利用してはならないことを示します
>>6。
[9] ただしヘッダー名が指定された場合は、そのヘッダーのみが検証が必要なことを表しています。
[27] 応答における Pragma: no-cache
の意味は定義されていません
>>20 から、構文上応答に含めても問題ないとは言え、
Cache-Control: no-cache
のかわりとはできません。
[28] 一部の Webブラウザーは、 HTML文書中の
<meta http-equiv=Pragma content=no-cache>
のような指定に対応しています。
[4] 要求の Cache-Control:
ヘッダーでは、
引数は指定できません >>3。
[21] 要求の Pragma:
ヘッダーでは、
引数は指定できません >>20。
[7] 応答の Cache-Control:
ヘッダーでは、
引数を指定してもしなくても構いません。
指定する場合はヘッダー名のリスト (#
) を記述できます >>6。
[13] ヘッダー名は大文字・小文字不区別です >>6。
[14] 引数は引用文字列とするべきです >>6。 ヘッダー名が1つだけの時は字句とすることも不可能ではありませんが、 字句とするべきではありません >>6。 受信者はどちらにも対応するべきです >>3。
[24] 要求で Pragma: no-cache
を指定する時は、
Cache-Control: no-cache
も指定するべきです。
ただし Cache-Control:
で他のキャッシュ指令を指定する時はその限りではありません。
>>20
[25] 例えば
Cache-Control: max-age=30 Pragma: no-cache... のようにして
Cache-Control:
に対応しているキャッシュには
max-age
を適用させ、古いキャッシュには
no-cache
を適用させることができます。Cache-Control:
に対応していない古いキャッシュがどれだけ現存しているのかは不明です。
現在では Pragma:
なしで Cache-Control:
のみが指定されることが多いですから、 Pragma:
にしか対応できないキャッシュはWeb互換とはいえません。[42] If:
ヘッダーを使う場合、
Cache-Control: no-cache
と
Pragma: no-cache
を使うのが良い >>41 とされています。
If:
を参照。[44] EventSource
のための fetch における要求には、
利用者エージェントは Cache-Control: no-cache
を指定するべきです >>43。
[23] 要求に Cache-Control:
ヘッダーが無い場合、
キャッシュは Pragma:
ヘッダーの
no-cache
指令を Cache-Control: no-cache
が指定されたものとして処理しなければなりません >>20。
[11] 応答の Cache-Control:
ヘッダーにおいてヘッダー名が指定されていない場合は、
再利用の前に必ず検証しなければなりません。
[12] 応答の Cache-Control:
ヘッダーにおいてヘッダー名が指定されている場合は、
キャッシュは再利用しても構いませんが、
指定されているヘッダーは検証に成功しないと送信してはなりません
>>6。
[15] HTTP/1.0 キャッシュには応答の Cache-Control: no-cache
に対応していないものもあります >>6。
[16] Cache-Control:
ヘッダーにおけるヘッダー名の指定に対応せず、ヘッダー名なしの場合と同じように処理する実装もあります
>>6。
[19] Webブラウザーのスーパーリロードでは Cache-Control: no-cache
付きの要求が生成されるのが普通です。通常の再読み込みでも
Cache-Control: no-cache
が付されることもあります。
<meta http-equiv=Pragma content=no-cache>
[29] WinIE 3.02〜4.01 には、<
が最初の方にあるとキャッシュにきっちり保存してしまい、
M$ はこれを不具合と認識していました。meta
http-equiv
="pragma" content
="no-cache">
Q222064 - "Pragma: No-cache" Tag May Not Prevent Page from Being Cached http://web.archive.org/web/20010808174139/support.microsoft.com/support/kb/articles/Q222/0/64.ASP
対策として、この文書では body
要素の後に2つめの
head
要素を置き、その中に meta
要素のタグを書けとものすごいことを言っています。例:
<HTML> <HEAD> <META HTTP-EQUIV="REFRESH" CONTENT="5"> <TITLE> Pragma No-cache </TITLE> </HEAD> <BODY> This is an example of where to place the second header section<br> so that the "Pragama, No-Cache" metatag will work as it is supposed to.<br> </BODY> <HEAD> <META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> </HEAD> </HTML>
M$ は一体何を考えているのでしょう。英語の意味もついに分からなくなりましたか。
[30] WinIE4 (4.01 SP2 まで) には、 <
が含まれている文書について、その大きさが64キロオクテット以下ならキャッシュから削除、それより大きければ普通に削除しないという挙動を取っていました。
M$ はこれを不具合と認識し、修正パッチを出しています。meta
http-equiv
="pragma" content
="no-cache">
Q234247 - Web Page with "Pragma: No-Cache" Tag Stored in Cache Not Deleted http://web.archive.org/web/20010816054645/http://support.microsoft.com/support/kb/articles/Q234/2/47.ASP
[31] Q234067 - HOWTO: Prevent Caching in Internet Explorer http://web.archive.org/web/20010810040821/support.microsoft.com/support/kb/articles/Q234/0/67.ASP
によれば、 WinIE4 と WinIE5 で Pragma: no-cache
(と HTML 形)
を処理してくれるのは over SSL の時だけだそうです。
仕様書に従うなら Pragma: no-cache
が使えるのは要求のときで応答のときは駄目なんだ、ほんとは、なーんて珍しくまともなことを言っています。
[32] [HOWTO] Internet Explorer でキャッシュを無効にする ( ( 版)) http://support.microsoft.com/kb/234067
Pragma: no-cache
[33] HTTP RFC は応答における Pragma: no-cache
は意味が定義されておらず、効果は当てにできないしています (>>27)。
[37] >>36 によれば応答の Pragma: no-cache
に Firefox、Opera、Chrome が対応しているものの、 IE
は対応していないようです。対応している場合、 Cache-Control:
ヘッダーの有無に関わらず、 Cache-Control: no-cache
と同じ効果を持つようです。
[34] 次のサイトは Cache-Control: no-cache
などと併用して
Pragma: no-cache
を応答に含めることでキャッシュを無効化できると説明していますが、
他の解説サイト等のコピペなのか実際に動作を確認したのかは不明です。
[45] Fix #165: make it clearer "no-cache" revalidates · whatwg/fetch@7adae85 ( 版) https://github.com/whatwg/fetch/commit/7adae85e7524a9cbff89d8ac39c7d4f01044edce
[46] 567365 - Cache-Control no-cache on https page disables history () https://bugzilla.mozilla.org/show_bug.cgi?id=567365
no-cache
というキャッシュ指令の名前ではありますが、 キャッシュが保存することは認められています。保存はして構いませんが、 再利用のために検証が必要です。保存すら認めたくない場合には、no-store
を使うことができます。