WebブラウザーでWebページのURLを誤って入力すると、偶然これに遭遇しました。
訪問http://example.com/%
するとHTTP 400 Bad Requestエラーがスローされるのはなぜですか?サーバーは、パーセント記号の後または前に何か他のものを期待していますか?
ApacheおよびNginxサーバーで発生するようです。
(サーバー:cloudflare-nginx)/superuser//%
(サーバー:Apache)http://mozilla.org/%
WebブラウザーでWebページのURLを誤って入力すると、偶然これに遭遇しました。
訪問http://example.com/%
するとHTTP 400 Bad Requestエラーがスローされるのはなぜですか?サーバーは、パーセント記号の後または前に何か他のものを期待していますか?
ApacheおよびNginxサーバーで発生するようです。
(サーバー:cloudflare-nginx)/superuser//%
(サーバー:Apache)http://mozilla.org/%
回答:
あたりとしてRFC 3986、裸の%
文字が有効でないURIの構文。2つの意味のある16進数が続く必要があります。
HTTPのあなたが得たステータスコードはに属している4xx
クラス:
4xx: Client Error - The request contains bad syntax or cannot be fulfilled
特に、コード400
はRFC 2616 のInternet Engineering Task Force(IETF)で定義されています。
10.4.1 400 Bad Request
構文が正しくないため、サーバーがリクエストを理解できませんでした。クライアントは、変更せずにリクエストを繰り返すべきではありません。
Wikipediaの引用(太字強調鉱山):
URIに許容文字がされているか、予約済みまたは予約されていない(またはパーセントエンコーディングの一部としてパーセント文字)。
リテラル%
シンボルを挿入する場合は、パーセントエンコードされた表現を使用する必要があります%25
。
RewriteRule (.*) xyz/$1
.htaccessに次のRewriteRule (xyzは任意のフォルダー名)がある場合、%を%2525として二重エンコードする必要があります。