Adobe Acrobat 拡張機能が有効な端末で、POST で返した PDF が 405 になる

POST のレスポンスとして PDF を返す機能が、特定の端末でのみ 405 Method Not Allowed になりました。原因は Adobe Acrobat の Chrome 拡張機能で、アプリケーション側の問題ではありませんでした。

新規タブに 405 が出る

  • PDF を表示する操作で、新規タブに 405 Method Not Allowed が出る
  • 同じアカウント・同じ URL でも、端末によって再現する / しないが分かれる
  • サーバーは無変更。リリースのタイミングとも一致しない

再現する端末には拡張機能が入っていた

再現する端末に共通していたのは、Adobe Acrobat の Chrome 拡張機能が有効になっていることでした。無効にすると解消し、有効に戻すと再現します。

拡張機能が同じ URL を GET で取り直す

この拡張機能は内蔵 PDF ビューアを自前のビューアに置き換えます。その際、受信済みのレスポンスボディを再利用せず、タブの URL を GET で取り直します。

[意図した動作]
  ブラウザ ──POST──► サーバー ──200 application/pdf──► 内蔵ビューアで表示

[拡張機能が有効な場合]
  ブラウザ ──POST──► サーバー ──200 application/pdf──► 拡張機能が横取り
                                                        │
                      サーバー ◄──GET(同じ URL)───────┘  ← メソッドが変わる
                         │
                         └──405 Method Not Allowed──► タブに表示される

POST しか受け付けない URL に GET が飛ぶため 405 になります。PDF の取得自体は成功しているものの、拡張機能がその結果を使わずに取り直しています。

次の 4 つが重なったときに起きる

  • PDF を POST のレスポンスとして返している
  • Content-Disposition: inlineattachment ならビューアを経由しないため発生しない)
  • その URL に GET のハンドラがない
  • 端末で該当の拡張機能が有効

GET で取得している PDF では問題になりません。取り直しても同じレスポンスが返ります。

アプリが発行していない GET を見つける

  • 端末で挙動が分かれるなら、原因はアプリの外にある可能性が高い。拡張機能・セキュリティソフト・プロキシが候補
  • 手がかりはアクセスログに残る。アプリが送るはずのない GET が、POST の直後に同じ URL へ記録されている
  • 405 は URL 自体が一致していることを示す。ルーティングは通ったうえでメソッドだけが弾かれている。単一メソッドしか使わない URL でこれが出た場合、アプリ以外が発行していると考えられる

参考

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください