by
Anonymous Coward
on 2021年07月19日 17時01分
(#4074010)
時代に乗り遅れてる老害的な書き込みだなぁ それだと今流行のFastlyも使えなくなる
Reddit、Spotify、Twitch、Stack Overflow、GitHub、gov.uk、Hulu、HBO Max、Quora、PayPal、Vimeo、Shopify、Stripe、CNN、The Guardian、The New York Times、BBC、Financial Times これ全部 Fastly 使ってるぞ
MDN を信じずに「Cache-Control」には「private」を含めよう (スコア:1)
Web開発者がトップクラスとして信用しているサイトは MDN ですが、そこの Cache-Control の解説が酷いです。
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Cache-Control [mozilla.org]
にっこりしている顔文字🙂 [mozilla.org] 付きの「良い例」として
Cache-Control: no-store を挙げていて、
プンスカしている顔文字😡 [mozilla.org] 付きの「悪い例」として
Cache-Control: private,no-cache,no-store,max-age=0,must-revalidate,pre-check=0,post-check=0
を挙げていますが、「良い例」の方だと今回のような漏洩事故の原因となります。
今回の件が、このせいかどうかは分かりませんが、MDNを信じて情報漏えいが起
Re: (スコア:0)
「no-store」でキャッシュするような CDN を使った時点で負けなんじゃないか?
Re:MDN を信じずに「Cache-Control」には「private」を含めよう (スコア:1)
時代に乗り遅れてる老害的な書き込みだなぁ
それだと今流行のFastlyも使えなくなる
Reddit、Spotify、Twitch、Stack Overflow、GitHub、gov.uk、Hulu、HBO Max、Quora、PayPal、Vimeo、Shopify、Stripe、CNN、The Guardian、The New York Times、BBC、Financial Times
これ全部 Fastly 使ってるぞ
https://support.fastly.com/hc/en-us/community/posts/360040167351-Fastl... [fastly.com]
最初にキャッシュを行わない条件について理解しておきましょう。Fastlyサーバーでは以下の条件の場合はキャッシュを行いません。
・オリジンからのレスポンスにCache-Control: private が含まれている
(Cache-Control: no-store, no-cache はキャッシュ対象となります)
Re: (スコア:0)
Fastly が流行的で大手なのは認める(ついでに老害というのも認めよう)。
でも、事故の臭いのするものを使ってキャッシュ漏れるなら、別のサービス利用したら良くない?って私は考えるよ。
今流行のキャッシュは 0.2 秒 で消えるの (スコア:1)
何故 Fastly を使うのか [hatelabo.jp] を読んで欲しいんだけど、
「普通の CDN が数十秒?数分とかかるのにたいして 0.2 秒で全部消えることが保証されている」の部分が今 Fastly が流行ってる理由なの。
え、たった0.2秒? それ意味あるの? と思うかもしれない。
でも、よく考えて欲しいんだけど、それだと例えば掲示板やチャットサイトでも使える。
スラドのコメントだって反映に0.2秒かかっても問題ないからスラドでも問題なくキャッシュが活用できる。
0.2秒の遅延が許せない場合を除けば、リアルタイムのニュース配信だってなんだってキャッシュできるし、いちいちこのコンテンツは○分キャッシュして~なんて考えなくて良いわけ。
キャッシュサーバが0.2秒キャッシュしてくれるだけで、当該ページへのオリジンへのアクセスは秒間5回ですむ。
それならどんなへっぽこサーバだって当たり前に捌けるわけで、0.2秒もキャッシュしてくれれば実は十分なわけだ。
で、そうなるとブラウザキャッシュって邪魔だよね。
ブラウザの「戻る」を使ったときにもメモリキャッシュなんて使わずに最新(遅延0.2秒未満)の情報をロードして欲しい。
スラドだったら「戻る」で戻っても新しいコメントが反映されてた方がユーザが新しいコメントに気が付いて返信増えてサイトが盛り上がるかもしれない。
だとすると、自然とブラウザキャッシュを無効にしたくなるし、そのためには、
Cache-Control: no-store
とすることになる。(ちなみに、仮にブラウザキャッシュの有効期間1秒にしても、1秒以上経過した後でもブラウザの戻る・進む機能ではメモリキャッシュが使われることもあるので no-store にした方が確実)
それで Fastly のキャッシュも無効になったら不便なので、機密だからキャッシュして欲しくないコンテンツには、「private」の方を使って制御した方が便利、ということになる。
# RFC的には no-store をキャッシュするのはよくから、RFCに反する挙動に関する警告をもっとしっかり告知すべきだとは思うが。
しかし、CDN業者に関連RFC守れというのは、正直関係RFC自体が古臭くてどうしようもなくなっているからRFC守ったらイノベーションが破壊されるのが現状だと思う。
例えば、キャッシュ時間を制御するための max-age は、「秒」単位なんだよね。
https://datatracker.ietf.org/doc/html/rfc7234#section-1.2.1 [ietf.org]
「The delta-seconds rule specifies a non-negative integer, representing time in seconds.」とあるから小数点も使えない。
CDNのキャッシュを 0.2秒 にする時代に、キャッシュ時間指定に秒単位の整数で指定って、正直時代にそぐわない。あまりにも美しくない。
ってことで、
・「Cache-Control: no-store」でブラウザキャッシュは完全無効(更新しない png, css, js 等は除く)
・CDN のキャッシュ時間は全ページ 0.2秒
・個人情報を含むページは「Cache-Control: private」でCDNキャッシュ無効
のシンプル運用がお勧めなのです。
Fastlyは素晴らしいのでFastly使いましょう。
これが「別のサービス利用したら良くない?」への反論です。
Re: (スコア:0)
Fastlyの凄さの1つ、キャッシュが0.2秒で消えるというのはインスタントパージ(キャッシュ無効化するAPI叩く)の特長だろう。なので、そのシンプル運用だとFastlyでなければならない理由としては不十分に感じる。そういうただキャッシュTTL 0.2秒ならほかにもできるとこありそうに思うし、TTL 1秒に条件を緩めてよければだいたいどこのCDNでもできるに違いない。