为什么空格字符 URL 编码为 %20?我看不出空间被认为是保留字符的原因。
问问题
1378 次
3 回答
5
因为空格在很多情况下被用作分隔符(带有参数的程序、HTTP 命令等),所以它通常必须被转义,在 unix 命令行中使用 \,在 windows 命令行中使用周围的 ",使用 % 20 在 URL 等中。
在 HTTP 协议中,当您尝试访问时http://www.foo.com
,您的浏览器会在端口 80 上打开与服务器 www.foo.com 的连接,并发送以下命令:
GET http://www.foo.com HTTP/1.0
Accept : text/html
语法是“方法 URL HTTPVERSION”
如果您尝试请求http://www.foo.com/my page.html
而不是http://www.foo.com/my%20page.html
,服务器会认为“page.html”是您正在寻找的 HTTPVersion...
于 2013-06-17T12:53:30.567 回答
2
请参阅RFC 3986 第 2.3 节:
2.3. Unreserved Characters
Characters that are allowed in a URI but do not have a reserved
purpose are called unreserved. These include uppercase and lowercase
letters, decimal digits, hyphen, period, underscore, and tilde.
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
于 2013-06-17T12:55:42.173 回答
2
因为一个 HTTP 请求的Request-Line定义为:
Method (Space) Request-URI (Space) HTTP-Version CRLF
严格遵守规范的原始 HTTP 服务器将执行以下操作:
splitInput = requestLine.Split(' ')
method = splitInput[0]
requestUri = splitInput[1]
httpVersion = splitInput[2]
如果您在 URL 中允许空格,那将会中断。
于 2013-06-17T13:10:09.773 回答