为什么空格字符网址编码为%20? 我没有看到空间被认为是保留字符的原因。
答案 0 :(得分:5)
因为在很多情况下空间被用作分隔符(带有参数,HTTP命令等的程序),所以它经常需要转义,在unix命令行中使用\,在windows命令行中使用环境,URL中包含%20等
在HTTP协议中,当您尝试访问http://www.foo.com
时,浏览器会在端口80上打开与服务器www.foo.com的连接,并发送命令:
GET http://www.foo.com HTTP/1.0
Accept : text/html
语法为“METHOD URL HTTPVERSION”
如果您尝试请求http://www.foo.com/my page.html
而不是http://www.foo.com/my%20page.html
,服务器会认为“page.html”是您正在寻找的HTTPVersion ...
答案 1 :(得分:2)
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 / "-" / "." / "_" / "~"
答案 2 :(得分: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中允许空格,那将会中断。