|no-cache |Forces caches to submit the request to the origin server for validation before releasing a cached copy. (キャッシュ(複製)が使用される前に、その有効性を(キャッシュ元の)サーバに必ず問い合わせます。)(大雑把な訳です。)
|Date |The Date general HTTP header contains the date and time at which the message was originated. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Date より
なぜCache-Control: no-cacheでキャッシュ? (スコア:0)
CDN使ったこと無いからよくわからんのだけど
Cache-Control: privateでキャッシュしない→わかる
Cache-Control: no-cacheでキャッシュする→???
Re:なぜCache-Control: no-cacheでキャッシュ? (スコア:1)
>またno-cacheオプションによりキャッシュ使用時にサーバに対して問い合わせを行うようになり
http://tech.mercari.com/entry/2017/06/22/204500 より
Cache-Control フィールドには、 no-store と no-cache 値(他)がある。
要約すると、no-store は、再使用禁止で、no-cache は、無断再使用禁止である。
(#3233717) (上)は、おそらく、キャッシュ禁止(no-cache)を再使用禁止(no-store)と誤解していませんか?
|no-cache
|Forces caches to submit the request to the origin server for validation before releasing a cached copy.
(キャッシュ(複製)が使用される前に、その有効性を(キャッシュ元の)サーバに必ず問い合わせます。)(大雑把な訳です。)
要は、コンテンツ(キャッシュ)の有効性(賞味期限)をサーバに問い合わせて、腐っていたら新鮮なものに更新するから、ユーザが腐ったコンテンツを食べる事故を防止できる。まだ食べられるならコンテンツ(メッセージボディ)分の通信量を節約できる。
|no-store
|The cache should not store anything about the client request or server response.
(クライアントリクエストとサーバレスポンスに関する、キャッシュを保管することは(義務として)できません。)
まだ、食べられるかもしれないのにキャッシュ(コンテンツ)を捨てる(保管しない)ので、常にコンテンツ(メッセージボディ)分の通信量を消費する。
引用元&参考 https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Cache-Control
「Cache-Control: no-cache」と「Expiresヘッダ」を併用する意図は知らない。(*)また、1秒前ではなく10年ぐらい前の固定日にしておくような。(クライアントの時計が電池切れ、電池交換などで初期化されたときの対策として)それに、時刻同期せずに利用されることを想定すると、サーバ時刻とクライアント時刻が5分違っているとレアケースでおかしくなるような。(実運用上は問題ないだろうけど)(個人的には、Expiresに1秒前は明らかにおかしいと思う。)
(*) WEBブラウザ、プロキシほか、実装が多い(運用形態が多様)から多重指定で保険を掛ける意図だろう。 Expires ヘッダはみた感じ、 Cache-Control よりも古い仕様みたいだし。使い勝手は適材適所に、なかんじ。
Re:なぜCache-Control: no-cacheでキャッシュ? (スコア:1)
疑問は自己解決した。
|Date
|The Date general HTTP header contains the date and time at which the message was originated.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Date より
Re: (スコア:0)
ID1桁って初めてみたと思ったら
suzuki(5) までが名前なのかw
Re: (スコア:0)
#3233717です、なるほど、no-cacheという名前に惑わされてました。
しかしやはりメルカリの記事にある
>キャッシュをしないのはCache-Control: privateが含まれている場合のみとわかりました。
は不可解ですね。no-storeが指定されていた場合はどんな挙動になっていたんだろう。
Exoiresについては1970-01-01が指定されてるケースはよく見ますが、1秒前というのは確かに無意味で危険に思えます。
Re: (スコア:0)
no-storeは、一切の保存を許可していませんので、プライバシーに関する情報などでは、本来no-storeを使用するのがお勧めです。
ただ、一切保存されないので、ブラウザの「戻る」さえも使えなくなります。
ちなみに、no-cacheにexpiresは効きません。
Expiresが過去という記述によるキャッシュ無効化は、HTTP/1.0時代の名残です。
(HTTP/1.0への後方互換とも言う…けど、生き残っているのか?w)
Re: (スコア:0)
#3233883ですが、説明不足気味だったので、補足します。
ネットワークの構成を
オリジンサーバー⇔中間サーバー(複数可)⇔ブラウザ
と仮定します。
>キャッシュをしないのはCache-Control: privateが含まれている場合のみとわかりました。
は不可解ですね。
no-cache,privateは解釈が微妙な部分があるので、どのように実装されているかは中間サーバーの仕様によります。
例えば、no-cacheの場合、あまりにも誤解(no-cache,Expires過去でキャッシュされない)が広まりすぎているので、中間サーバーの仕様として、キャッシュしないとしている場合があります。(今回のメルカリの旧サーバーがそれ)
privateは
Re: (スコア:0)
#3233717です、なるほどno-cacheという名前に惑わされてました。
しかしそれでもprivate以外ではキャッシュするという仕様は謎ですね。no-storeだった場合は完全に仕様外になりそうですが。
Expiresを1970-01-01に設定してるケースは時々見ますが、1秒前というのは確かに意味不明で危険。