HTTP 405 Method Not Allowed:意味と直し方

HTTP 405 Method Not Allowed

HTTP 405 Method Not Allowed:原因、Allowヘッダー、対処法 | We.Inc

サーバーが405を返す理由、送らなければならないAllowヘッダー、そしてFlask、Express、Next.jsでの直し方を解説します。自分のルートに合った正しい405レスポンスを組み立てられます。

405 Method Not Allowedは、URLは存在するものの、使ったHTTPメソッドを受け付けないという意味です。たとえば、GETしか処理しないルートにPOSTを送った場合です。サーバーは、受け付けるメソッドをAllowヘッダーで列挙しなければなりません。そのどれかを送るか、サーバー側にそのメソッドのハンドラーを追加しましょう。

405と近いステータスの比較

ルートが処理するメソッドにチェックを入れ、クライアントが送るメソッドを選ぶと、サーバーが返すべき正確なレスポンスがビルダーに表示されます。通常の成功か、チェックを入れた順にメソッドを並べたAllowヘッダー付きの405です。

よくある質問

405はクライアントの問題ですか、サーバーの問題ですか?

4xx系のコードなので、サーバーが問題にしているのはリクエストです。クライアントが別のメソッドを使うか、サーバーの管理者が送られてくるメソッドへの対応を追加するかのどちらかです。

405レスポンスにはAllowヘッダーが必須ですか?

必須です。RFC 9110では、サーバーはリソースが現在サポートしているメソッドを列挙したAllowヘッダーフィールドを生成しなければならないと定めています。リソースがどのメソッドも受け付けない場合は、空のリストでも構いません。

フォームを送信すると405になるのはなぜですか?

たいていは、ルートが受け付けないメソッドをフォームが送っています。たとえばFlaskのルートは、ルートのデコレーターに methods=["GET", "POST"] を渡すまではGETにしか応答しません。

Expressが405ではなく404を返すのはなぜですか?

Expressは、メソッドが一致しない場合もパスが一致しない場合も同じように扱います。どのルートも応答しなかったので、リクエストは404のハンドラーに流れます。そのパスに対してapp.allで受け止める処理を追加し、自分で405を返しましょう。

405と501の違いは何ですか?

405は、このリソースが、サーバーの理解しているメソッドを拒否していることを意味します。501は、サーバーがどのリソースに対してもそのメソッドをサポートしていないことを意味します。

仕様に書かれたルール

405がよく発生する場所

スタック別の修正方法

Flask:ルートが受け付けるメソッドをすべて宣言する

methods= がないと、ルートはGETにしか応答しません(HEADとOPTIONSはFlaskが自動で追加します)。

Express:404に流さず、本物の405を返す

本来のハンドラーの後に置いたapp.allが、同じパスへのそれ以外のメソッドをすべて受け止めます。

Next.jsのルートハンドラー:呼び出すメソッドをエクスポートする

app/api/items/route.ts。エクスポートしていないメソッドのリクエストは、あなたのコードに届きません。

HTML:サーバーが期待するメソッドをフォームに指定する

method属性のないフォームはGETで送信されます。

405レスポンスビルダー

このルートが処理するメソッド

クライアントが送るメソッド

サーバーが返すべき内容

このメソッドはサポートされているので、405は関係ありません。

このメソッドは一覧にないため、チェックを入れた{n}個のメソッドを示すAllowヘッダー付きの405が返ります。

無料で始める · クレジットカード不要

関連: ガイド|Webマーケティングと集客を学ぶ

製品

ご利用いただける方

機能

リソース

会社情報

サイトマップを見る