Fastly 背後でのログイン状態の一貫性のない問題

少し奇妙な問題が発生しているのですが、関与している要因が多数あります。

問題:

ログインした状態でフォーラムのトップページに直接移動すると、UI 上ではログインしていないように表示されてしまいます。例えば、ナビゲーションバーにユーザーアバターではなく、サインアップ/サインインのリンクが表示されます。

特定の投稿に直接移動すると、正しいログイン状態が表示され、その後のプッシュステート遷移(ホームページへの移動を含む)も正常に動作します。ただし、ホームページをリロードすると、上記のようにログアウト状態のように表示されてしまいます。

背景:

Polling 機能(GCP Compute Instance と直接通信する部分)を除き、Discourse はすべて Fastly の背後で運用しています。

この問題はキャッシュ層に関連しているのではないかと思われますが、このフォーラムでの議論を慎重に確認してきました。Fastly の自動 GZIP 圧縮は有効にしていません。

フォーラムはこちら上記の動作を記録した動画はこちら です。

さらに調査した結果、この問題は、Cache-Control レスポンスヘッダーが no-cache, no-store に設定されている場合と、Fastly がこれらの値を無視していることが組み合わさっていることに関連している可能性があります。

私の Fastly CDN は、Web クローラー向けの noscript 版のホームページと思われるものを HIT としてマークしていました。これは、おそらく no-cache, no-store の値でクロールされたためです。

Fastly は、このような状況では Expires: 0 を追加することを推奨しています。

私はこれを実装しました。これは Fastly のドキュメントで推奨されている対応です。