高木浩光さんに訊く、個人データ保護の真髄 ——いま解き明かされる半世紀の経緯と混乱 - Cafe JILIS
https://cafe.jilis.org/2022/03/18/160/
mastodon の任意の投稿の Cache-Controle 値、ログイン時には max-age=0, private, must-revalidate になるが、ログアウト時には max-age=10, public になるのはたぶんかなり微妙な実装っぽい気がする。CDNがキャッシュするかどうか、これだとタイミング次第で、キャッシュが切れたタイミングでログインユーザーがリクエストすればキャッシュされないし、非ログインユーザーがリクエストすればキャッシュされてしまう(キャッシュされたあとにログインユーザーがリクエストすると10秒間はたぶんCDNが返すことになりそう)。
RFC7231の7.1.4(Vary) にも以下があり、勉強になる。
there is no need to send the Authorization field name in Vary because reuse across users is constrained by the field definition (Section 4.2 of [RFC7235])
https://www.rfc-editor.org/rfc/rfc7234#section-3
A cache MUST NOT store a response to any request, unless:
- the Authorization header field (see Section 4.2 of [RFC7235]) does not appear in the request, if the cache is shared, unless the response explicitly allows it (see Section 3.2), and
これ、「Authorization ヘッダーがある場合はいかなるレスポンスもキャッシュしてはならない」、という定義なんだな。共有キャッシュの場合( Cache-Controle: public )でもキャッシュ不可だが、レスポンスが明確にそれを許容する場合は除外。Section 3-2 にも同じことが書いてあり、”explicitly allows it” というのは public, must-revalidate, s-maxage の使用がそのような効果をもつ。 s-maxage はそのためにあるのか…。
昨日、Twitterを見ざるを得なかっただけでだいぶ苦しみが高まり、人里から離れたくなっている気がする。ひとまず深呼吸しました。
https://youtu.be/UiO-xwvVARk
んんん、Mastodonのユーザーページが思いっきりそのパターンだったのだわ
cache-control: max-age=0, private, must-revalidate
cache-control: max-age=10, publicRE: https://misskey.m544.net/notes/7186ff03be1d75085f0623b4