1

为什么空格字符 URL 编码为 %20?我看不出空间被认为是保留字符的原因。

4

3 回答 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 回答