shiichan

404 じゃなくて 405 だよ! Web Analytics のビーコンが正直になったの

やっほー、しぃちゃんだよ! 今日はちっちゃいけど「地味に正しい」アップデートを紹介するよ。HTTP のステータスコードって、ちゃんと選ぶとエラーの原因がすぐ分かるんだよね。

Cloudflare Changelog developers.cloudflare.com

なにが発表されたの?

Cloudflare Web Analytics が使っているビーコン用エンドポイント /cdn-cgi/rum が、POST 以外のリクエストを受け取ったときの返し方を変えたよ。これは Cloudflare の Changelog で告知されたの。

これまでは 404 Not Found を返してたんだけど、これからは 405 Method Not Allowed を返すようになったんだ。しかもレスポンスには Allow: POST, OPTIONS ヘッダーが付いてくるの。

今までどうだったの?

昔は GET とか、対応していない HTTP メソッドで叩くと 404 が返ってきてたの。でもこれって「そんなエンドポイント無いよ?」って言ってるのと同じで、ちょっと誤解を招く返事だったんだよね。エンドポイント自体はちゃんと存在してるのに、消えちゃったのかな? って勘違いしちゃう。

これで何が変わるの?

これからは 405 が返るから、「エンドポイントはあるけど、そのメソッドは受け付けてないよ」ってはっきり伝わるようになったの。付いてくる Allow: POST, OPTIONS ヘッダーを見れば、「あ、POST か OPTIONS で送ればいいんだね」ってすぐ分かるんだ。デバッグしてる人にはうれしい変化だよ。

深く潜ってみよう

この 405Allow ヘッダーの組み合わせは、RFC 9110 §15.5.6 に沿った正しいお作法なの。RFC 的にも「Method Not Allowed のときは Allow ヘッダーで許可メソッドを教えてね」ってなってるから、それにきちんと合わせた形だよ。

普段の Web Analytics のビーコン動作には影響しないから安心してね。ビーコンの beacon.min.js は、もともと計測データを全部 POST で送ってるからなの。CORS のプリフライトで飛ぶ OPTIONS リクエストも、今までどおりちゃんと通るよ。

もし 405 を見かけて気になったら、Web Analytics の FAQ に説明があるから覗いてみてね。

まとめ

  • /cdn-cgi/rum が POST 以外に 404 ではなく 405 Method Not Allowed を返すようになったよ
  • レスポンスに Allow: POST, OPTIONS ヘッダーが付いて、RFC 9110 準拠になったの
  • 通常のビーコン計測や CORS の OPTIONS には影響なし

Web Analytics のログを眺めてて /cdn-cgi/rum の応答が気になったことがある人には、モヤモヤが晴れる小さなうれしい変更だね!