webserver – URL のパーセント記号が HTTP 400 Bad Request エラーを引き起こすのはなぜですか?

apache-http-server http nginx webserver

WebブラウザでWebページのURLを誤入力していた時に、偶然にもこれに行き当たりました

なぜ http://example.com/% を訪問すると、HTTP 400 Bad Request エラーがスローされるのでしょうか?サーバはパーセント記号の後や前に何か他のものを期待しているのでしょうか?

ApacheやNginxサーバでも発生するようです

  22  iglvzx  2014-05-28


ベストアンサー

Short answer

RFC 3986 にあるように、URI の構文では、16進数の2桁の文字は有効ではないので、16進数の後に意味のある2桁の数字を続けなければなりません

Long answer

取得したHTTPのステータスコードは4xxクラスに属します

4xx: Client Error - The request contains bad syntax or cannot be fulfilled

ソース。ハイパーテキスト転送プロトコル(HTTP)ステータスコードレジストリ

特に、コード400は、Internet Engineering Task Force (IETF)のRFC 2616で定義されています

10.4.1 400 Bad Request

リクエストは構文が正しくないためにサーバーに理解されなかった。クライアントは修正せずにリクエストを繰り返すべきではない[SHOULD NOT]

ソース。RFC 2616 – ハイパーテキスト転送プロトコル — HTTP/1.1

ウィキペディア(太字強調の私)を引用します

URIで許可される文字は予約済みまたは予約されていない文字(またはパーセントエンコーディングの一部としてのパーセント文字)である

ソース。Percent-encoding – URI内のパーセントエンコーディング

リテラル % シンボルを挿入したい場合は、そのパーセンテージでエンコードされた表現を使用する必要があります。%25

Further reading

33  and31415  2014-05-28


パーセント記号は、通常はURLでサポートされていない文字を挿入するためのものです。例えば %20 はスペースと同じです

9  LPChip  2014-05-28


タイトルとURLをコピーしました