405 Method Not Allowed

この URL はその HTTP メソッドに対応していません。

使いどころ

読み取り専用エンドポイントへの POST。Allow ヘッダーを含めます。

よくある原因と対処法

典型的な原因は、GET にしか定義されていないルートへの POST、PUT や DELETE のハンドラーがないフレームワークのルート、静的ファイルに送信するフォーム(nginx は静的コンテンツへの POST に 405 を返します)、POST を GET に変えてしまった末尾スラッシュのリダイレクトなどです。レスポンスには対応しているメソッドを列挙した Allow ヘッダーが含まれるはずなので、その URL に対して curl -i -X OPTIONS で確認してください。

OPTIONS ハンドラーのないルートに CORS プリフライトが届くと 405 になり、ブラウザーはそれを CORS エラーとして報告します。ルーティングの前に OPTIONS に応答する CORS ミドルウェアを追加してください。S3 のウェブサイトエンドポイントや GitHub Pages のような静的ホスティングはそもそも POST を受け付けないため、そこに置くフォームには別途バックエンドが必要です。サーバーがどこにおいてもそのメソッドを認識しない場合は 501 を使います。

クライアントエラー (4xx)

4xx はクライアントエラーです。リクエスト自体が誤っている、認証されていない、または存在しないものを指しています。同じリクエストを再試行しても解決しません。

レスポンスでの表示

HTTP/1.1 405 Method Not Allowed

返し方

Node.js / Expressres.status(405).end()
Python / Flaskreturn '', 405
nginxreturn 405;

確認方法

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

HTTP ステータスコードを開く