URLのパーセント記号が原因でHTTP 400 Bad Requestエラーが発生するのはなぜですか?


22

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

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

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


回答:


32

短い答え

あたりとしてRFC 3986、裸の%文字が有効でないURIの構文。2つの意味のある16進数が続く必要があります。

長い答え

HTTPのあなたが得たステータスコードはに属している4xxクラス:

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

ソース:Hypertext Transfer Protocol(HTTP)ステータスコードレジストリ

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

10.4.1 400 Bad Request

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

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

Wikipediaの引用(太字強調鉱山):

URIに許容文字がされているか、予約済みまたは予約されていないまたはパーセントエンコーディングの一部としてパーセント文字)。

ソース:Percent-encoding-URIのPercent-encoding

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

参考文献


わかりません。私は「%25」で「%」記号をマスクする場合は、ファイルがまだ提供されませんが、エラー400は、私たちのシナリオ(アパッチ- > JKMount - > Tomcatの)中にスローされます
fiffy

RewriteRule (.*) xyz/$1.htaccessに次のRewriteRule (xyzは任意のフォルダー名)がある場合、%を%2525として二重エンコードする必要があります。
マルコマルサラ

9

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


4
そして、パーセント文字自体を挿入するためには、%25
Robotnik

A +は、スペースをエンコードするための近道です。実際のプラス記号が必要な場合は、その16進コード%2Bを使用します。
フィルペリー

3
+は、クエリ文字列内のスペースのみの正しいエンコーディングです。%20は、URL内の他の場所の正しいエンコードです。
エデンタウンゼント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.