web-dev-qa-db-ja.com

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

私のWebブラウザーでWebページのURLを誤って入力したとき、私は偶然これに遭遇しました。

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

ApacheおよびNginxサーバーで発生するようです。

22
iglvzx

短い答え

RFC 3986 のように、裸の%文字は有効ではありません [〜#〜] uri [〜#〜] 構文。 2つの意味のある 16進数 の数字が後に続きます。

長い答え

取得した [〜#〜] http [〜#〜] ステータスコードは4xxクラスに属しています。

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

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

特に、コード400[〜#〜] rfc [〜#〜] 2616の Internet Engineering Task Force (IETF)によって定義されます。

10.4.1 400 Bad Request

不正な構文のため、サーバーはリクエストを理解できませんでした。クライアントは変更なしでリクエストを繰り返すべきではありません。

出典: RFC 2616-Hypertext Transfer Protocol-HTTP/1.1

ウィキペディアの引用(太字の強調):

URIで使用できる文字は、reservedまたはunreservedまたはパーセント文字のいずれかです。パーセントエンコーディングの一部)。

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

リテラル%記号を挿入する場合は、パーセントエンコードされた表現%25を使用する必要があります。

参考文献

33
and31415

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

9
LPChip