为什么百分号登录会导致HTTP 400错误请求错误?


22

当我在网络浏览器中错误输入网页的网址时,我偶然发现了这一点。

为什么访问http://example.com/%会导致抛出HTTP 400 Bad Request错误?服务器是否在百分号之前或之前期待其他内容?

它似乎发生在Apache和Nginx服务器上。


Answers:


32

简短的回答

根据RFC 3986,裸%字符不是有效的URI语法; 它后面应该跟两个有意义的十六进制数字。

答案很长

您获得的HTTP状态代码属于4xx该类:

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

来源:超文本传输​​协议(HTTP)状态代码注册表

特别是,代码400Internet工程任务组(IETF)在RFC 2616中定义:

10.4.1 400错误请求

由于语法格式错误,服务器无法理解请求。客户端不应该在没有修改的情况下重复请求。

来源:RFC 2616 - 超文本传输​​协议 - HTTP / 1.1

引用维基百科(大胆强调我的):

URI中允许的字符是保留的或未保留的或百分比字符作为百分比编码的一部分)。

来源:百分比编码 - URI中的百分比编码

如果要插入文字%符号,则需要使用其百分比编码表示:%25

进一步阅读


我不明白。如果我用'%25'掩盖'%'符号,文件仍然不会被提供但是我们的场景中会抛出错误400(Apache - > JKMount - > Tomcat)
fiffy

9

百分号用于插入URL中通常不支持的字符。例如,%20与空格相同。


4
并且要插入一个百分比字符本身,它是%25
Robotnik 2014年

A +是编码空间的快捷方式。如果你想要一个真正的加号,请使用它的十六进制代码%2B。
菲尔·佩里

3
+是仅在查询字符串中的空格的正确编码。%20是网址中其他位置的正确编码。
Eden Townsend 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.