この 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 / Express | res.status(405).end() |
|---|---|
| Python / Flask | return '', 405 |
| nginx | return 405; |
確認方法
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/