HTTPプログラムの動作確認において、「HTTPのGETメソッドは、このURLではサポートされていません」というエラーが発生する場合があります。
ソースコードを確認しても一通り問題なく処理は完了するはずであり、なぜエラーが発生しているのか分からないと悩まれているのではないでしょうか?
それもそのはず、「HTTPのGETメソッドは、このURLではサポートされていません」というエラーは処理に問題があるのではなく、データの授受方式に問題があるのです。
「HTTPのGETメソッドは、このURLではサポートされていません。」とは
「HTTPのGETメソッドは、このURLではサポートされていません」とはクライアントとサーバ側でデータの授受が正しく行われていない状態です。
サーバ側が想定していた方式とは別の方法でデータが送信されており、サーバ側で受け取れないことを示しています。
では本エラーがどのようなエラーであるのか、エラーの内容についてご説明していきたいと思います。
405エラー
「HTTPのGETメソッドは、このURLではサポートされていません」はHTTPステータスコードの405エラーに相当します。405エラーは「Method Not Allowed(そのメソッドは許可されていないので利用できません。)」という意味のエラーであり、許可されていない(想定外の)処理を要求されたときに返すエラーです。
サーバ側でGETメソッドの利用を許可していないにもかかわらず、GETメソッドを利用した要求があったために「利用できません」とエラーを返しているのです。
なお、405エラーはGETメソッドだけでなく、後述するPOSTメソッドの使い方を誤った時にも発生します。
405エラーは以下の記事でも詳しく解説しています。
405エラー系
405エラー系には以下のエラーもあるようです。
いずれもサーバー間のデータの受信に問題があります。
「リクエストラインで受信されたメソッドは、オリジンサーバーによって認識されますが、ターゲットリソースによってサポートされていません。」
「要求されたリソースは、http メソッド 'get' をサポートしていません。」
「http method get is not supported by this url」
「getメソッド」とは
「getメソッド」とはHTTPにて引数を渡すときに使用されるメソッドです。getメソッドを利用する場合、引数はURLに直で入力されます。渡される側は、URLから直接引数を取得しようとします。
「httpのpostメソッドは、このurlではサポートされていません。」とは
クライアントからサーバへ引数を渡すメソッドとして、getメソッドの他にpostメソッドというものが存在します。
postメソッドの使い方を誤った場合に「httpのpostメソッドは、このurlではサポートされていません。」が発生します。
postもgetと同じくHTTPにて引数を渡すときに使用されるメソッドですが、postを利用すると引数はタグ内に埋め込まれるためURL上からは引数を確認することができません。
IDやパスワードなど機微な情報をやり取りする際には、postメソッドを利用してURLから情報が漏洩しないように配慮します。
「HTTPのGETメソッドは、このURLではサポートされていません。」の原因
ここからは「HTTPのGETメソッドは、このURLではサポートされていません」とエラーが発生してしまう原因について見ていきましょう。
考えられる原因は以下の通りです。
原因1:doGETを指定していない
一つ目の原因は受け取る際にdoGETメソッドを指定していないことです。
getメソッドで送信された引数を受け取るためには、明示的にdoGETを使用する必要があります。
サーバ側でdoGETが指定されていない場合、getメソッドは許可されていないメソッドとして扱われるため、本エラーが発生します。
原因2:doPOSTを指定してしまっている場合
他に考えられる原因としては、受け取り側でdoGETではなくdoPOSTを指定している場合です。
サーバ側でdoPOSTでの受け取りを指定してしまっている場合も本エラーが発生します。
postメソッドでの受け取りを明記しているため、getメソッドは許可されていないメソッドとして扱われてしまいます。
どちらの原因についても、ソースコードの書き方に問題があるため、本エラーを解消するには管理者にてソースコードの修正が必要です。
「HTTPのGETメソッドは、このURLではサポートされていません。」の対処法
続いて、「HTTPのGETメソッドは、このURLではサポートされていません」が発生してしまった場合の対処法について見ていきましょう。
対処1:doGETを指定する
一つ目の対処法は、サーバ側でdoGETを正しく指定してあげることです。
受け取る際にdoGETを指定してあげないとサーバ側はgetメソッドが許可されていることを識別できません。
クライアント側にgetメソッドで送信するよう要求するだけでなく、サーバ側もdoGETを指定することによりgetメソッドで受け取ることを教えてあげる必要があります。
対処1:postメソッドで引数を渡すように要求する
postメソッドでのデータ授受を行う場合はクライアント側にpostメソッドを利用して引数を渡すように指定しましょう。
受け取り側はdoPOSTを指定していても、クライアント側でgetメソッドでのやり取りを要求している場合はgetメソッドを使用してデータが送信されてしまいます。
まとめ
本記事は「HTTPのGETメソッドは、このURLではサポートされていません」というエラーに悩まされているプログラマ向けに事象の原因や対処法についてご紹介しました。
doGET、doPOSTの指定は比較的発生しやすいが原因が分かりにくいエラーなので、本記事を参考にデータの授受をよく確認してみるとよいでしょう。