このブログにAcitivityPubプラグインをインストールして、無事に投稿がMastodonのタイムラインにも流れてきた。と思ったら、無事ではなかった。投稿のURL( https://blog.srytk.com/aquei/839.html )をブラウザで開くとページが正常に表示されない!!

text/htmlではなく何故かapplication/jsonが返ってくる。これはまずい。JSONが表示されるということは、キャッシュされるべきでないリクエストがキャッシュされているようだ。ちなみにこのブログは自作のプラグインでcache-controlを追加し、cloudflareのCDNを利用してキャッシュしている。

ちょろっと調べた所、ActivityPubではAccept: application/activity+jsonなHeaderがついたHTTPリクエストでやり取りをするようだ。Accept: application/activity+jsonなリクエストでJSONを返し、それ以外では通常のWebページを返すように振る舞う。

つまり、Acceptヘッダーの値でキャッシュの振る舞いを変えればよいわけだ。通常、そのような用途にはVaryヘッダーを用いる。が、ここで大きな問題が発生するCloudflareはVaryヘッダーを無視するのだ!

悲しいが、Fediverseに対応するにはCloudflareでのキャッシュを諦めるしか無い。とりあえず、該当ページのキャッシュをPurgeし、自作キャッシュプラグインを停止した。おそらく、Cloudflareだけでなく、Varyを考慮しないキャッシュ系プラグインでも同様の問題が発生する可能性が高い。なにか良い案があればいいのだが。