DESIGN / CODE / INFRA / AI

解説

URLは合っているのに405?HTTPメソッドとAllowヘッダーを確認する手順

ブラウザでは開けるURLへ、プログラムから送ると405が返る。URLの文字だけでなく、GETやPOSTといったHTTPメソッドも確認してみよう。

URLは合っているのに405?HTTPメソッドとAllowヘッダーを確認する手順
保存リストを見る →
この記事の道しるべ 6項目

ブラウザでは開けるURLへ、プログラムから送ると405が返る。URLの文字だけでなく、GETやPOSTといったHTTPメソッドも確認してみよう。

この記事は405 Method Not AllowedとAllowヘッダーの読み方を整理する。公開サイトへ書き込みを試す練習はしない。編集部の確認は、ローカルの読み取り専用サンプルに限定しているよ。

メソッドは、何をしたいかを表す

HTTPの要求では、接続先のURLとともにメソッドを送る。GETは対象の表現を取得するため、POSTは内容を送って処理してもらうためなど、メソッドごとに意味がある。

同じURLでも、どの操作を受け付けるかはサーバーの実装や設定で決まる。存在するURLならどのメソッドでも使える、というわけではないよ。

405とAllowを一緒に読む

405は、メソッド自体はサーバーに認識されているが、その対象では許可されていないことを示す。405を返すときは、サーバーがAllowへ対応するメソッドを示す必要がある。

HTTP/1.1 405 Method Not Allowed
Allow: GET, HEAD

この例はGETとHEADが許可された対象。POSTを何度も繰り返しても、同じ条件のままなら解決につながりにくい。最初に要求行と応答のヘッダーを記録しよう。

ローカルで比べた結果

編集部では、GETとHEADに対応し、POSTへ405を返す練習サーバーで確認した。サンプルはファイルやデータを更新しない。

要求 練習サーバーの結果
GET /practice 200と練習用の本文
HEAD /practice 200、本文なし
POST /practice 405、AllowはGETとHEAD

これは、この確認用実装の結果。Pythonなどの標準サーバーが、未実装の操作に必ず405を返すという意味ではないよ。実際のサービスは公式API仕様と応答を照合する。

403・404・501とは同じではない

403はアクセスが拒否された応答、404は対象が見つからない応答として使われる。501は要求された機能をサーバーが実装していない場合などに使われ、特定のURLで操作を許可していない405と分ける。

実装が情報を隠すために別の応答を返す場合もあるので、番号だけで内部構成を断定しない。Allowに操作があっても、その操作が認証なしで成功する保証ではないよ。

直す前に、経路と仕様を確認する

  1. URL、メソッド、応答番号、Allowを記録する。
  2. API資料のパスとメソッドが一致しているか見る。
  3. 直前にリダイレクトがないか確認する。
  4. プロキシ、Webサーバー、アプリのどこで拒否されたかを調べる。
  5. 書き込みが必要な操作は、許可されたテスト環境と架空データで確認する。

なお、AllowとCORSのAccess-Control-Allow-Methodsは同じヘッダーではない。ブラウザのオリジン間アクセス制御と、そのURLが実装する操作の確認を混ぜないようにしよう。

リダイレクト後の操作は303と307、本文なしの取得確認はHEADとGETへ。

参照した公式資料

確認日:2026年10月26日。

参考・出典

公開と変更の記録
  • :初回公開

日時は日本時間です。記載のある変更は、確認できた編集記録に基づきます。更新日の違いだけから変更内容を推測して載せることはありません。

更新・訂正の方針 →

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。