https://twitter.com/MeYkikka/status/1638017917131591680
最近は非ログイン時の投稿ページの表示を速くする方針で行ってるのだわ
Twitter: 4.47MB / 3,160ms
Misskey: 2.40MB / 1,940ms
Mastodon: 1.59MB / 961ms
Pleroma: 0.61MB / 603ms
Meisskey: 0.96MB / 488msAuthorization ヘッダと Vary: authorization
仮に、 Vary: authorization が有効だとしたら、キャッシュキーがURL+Authorization+Authorizationの値 になるので https://hoge.com/path/?authorization=hogehoge みたいな一意キーで、それに対応するコンテンツが保存されることになる、と理解すればよいはず。
これが「Authorizationヘッダをつけたときにはキャッシュしてはならない」という命題と振る舞いとしては被ってしまう。 Vary: authorization が機能するときには authorization ヘッダがリクエストされてきたときのみで、このとき、 Cache-Control: public, max-age: 10 のようなヘッダをレスポンスするとする。仕様の解釈としては、以下のようになるとおもわれる。
https://hoge.com/path/?authorization=hogehogeのようなキーをCDNなどの中間サーバーが生成し、コンテンツを10秒間キャッシュするAuthorizationヘッダがリクエストされているので、キャッシュしない。
2 によって 1 の効果が打ちけされる(結果としてはキャッシュされない)はずだが、これが実装によって揺れがあるかどうかはちょっと確認してみたいところ(RFC7231の7.1.4の 「Vary: authorization は意味がない」という指摘によって意図されているのは、おそらくこの意味とおもわれる)。
もし、1 によってキャッシュされている場合、次回リクエストが max-age 期間内かつAuthorizationの値が同じであれば、CDNからキャッシュが返却されることになる。
Authorizationのキャッシュ挙動こう理解したのだわ
HTTPリクエストにAuthorizationヘッダーを付けたらキャッシュ格納しないよ。
でも、Cache-Control: publicとか付けると格納を許容しちゃうよ。
あと、Authorizationはキャッシュ格納を抑制するだけで使用することは制限しないから、Authorizationリクエストに対してキャッシュされた非Authorization応答を返しちゃうことはあり得るよ。
これを抑制したい時はVary: Authorizationが効くかもしれないよ。Varyをサポートしてない実装もあるからその場合はもっとめんどくさいよ。
RE: https://misskey.m544.net/notes/71870272a444e125bcc9bbbd
これ、authorizationはキャッシュの格納を抑制するだけで、キャッシュを引き出すことは制限出来ない説があるわね。
nginxでやったら認証リクエストに対してキャッシュを返してしまったのだわ。
■Varyなし
1. 匿名リクエスト
cache-control: public, max-age=10
x-cache: EXPIRED
2. 匿名リクエスト
cache-control: public, max-age=10
x-cache: HIT
3. authorization付きリクエスト
cache-control: public, max-age=10
x-cache: HIT ★認証リクエストに対して匿名キャッシュ済みを返してしまう
■Varyあり
1. 匿名リクエスト
cache-control: public, max-age=10
vary: authorization
x-cache: EXPIRED
2. 匿名リクエスト
cache-control: public, max-age=10
vary: authorization
x-cache: HIT
3. authorization付きリクエスト
cache-control: private, max-age=0, must-revalidate
vary: authorization
x-cache: MISS ★想定通り動作するRE: https://pleroma.tenjuu.net/objects/9875aadf-a03b-4f35-b427-57075e111cb1