当我在网络浏览器中错误输入网页 URL 时,我偶然发现了这一点。
为什么访问会http://example.com/%
导致抛出 HTTP 400 Bad Request 错误?服务器是否希望在百分号之后或之前输入其他内容?
这似乎发生在 Apache 和 Nginx 服务器上。
(服务器:cloudflare-nginx)https://superuser.com/%
(服务器:Apache)http://mozilla.org/%
答案1
简短回答
按照RFC 3986,裸%
字符不是有效的URI语法;它后面应该跟着两个有意义的十六进制数字。
长答案
这HTTP您获得的状态代码属于以下4xx
类别:
4xx: Client Error - The request contains bad syntax or cannot be fulfilled
具体来说,代码400
由互联网工程任务组(IETF)请求函数2616:
10.4.1 400 错误请求
由于语法错误,服务器无法理解请求。客户端不应在未做任何修改的情况下重复该请求。
引用维基百科(粗体强调是我的):
URI 中允许使用的字符包括预订的或者毫无保留(或百分比字符作为百分比编码的一部分)。
如果要插入文字%
符号,则需要使用其百分比编码表示形式:%25
。
进一步阅读
答案2
百分号用于插入 URL 中通常不支持的字符。例如 %20 与空格相同。