Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html HTTP空间请求中的URL编码_Html_Http_Url - Fatal编程技术网

Html HTTP空间请求中的URL编码

Html HTTP空间请求中的URL编码,html,http,url,Html,Http,Url,为什么将空格字符URL编码为%20? 我看不出为什么空格被认为是保留字符。因为在很多情况下(带有参数的程序、HTTP命令等),空格被用作分隔符,所以它通常必须转义,在unix命令行中使用\,在windows命令行中使用“with environment”,在URL中使用%20,等等 在HTTP协议中,当您尝试访问http://www.foo.com,浏览器在端口80上打开与服务器www.foo.com的连接,并发送以下命令: GET http://www.foo.com HTTP/1.0

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

因为在很多情况下(带有参数的程序、HTTP命令等),空格被用作分隔符,所以它通常必须转义,在unix命令行中使用\,在windows命令行中使用“with environment”,在URL中使用%20,等等

在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…

,因为在很多情况下(带有参数的程序、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
语法为“方法URL HTTPVERSION”

如果您试图请求
http://www.foo.com/my page.html
而不是
http://www.foo.com/my%20page.html
,服务器会认为“page.html”是您要查找的HTTPVersion…

请参见:

2.3。无保留字符
URI中允许但没有保留名称的字符
目的被称为无保留。这些包括大写和小写
字母、十进制数字、连字符、句点、下划线和波浪号。
无保留=字母/数字/“-”/“/”\u”/“~”
请参见:

2.3。无保留字符
URI中允许但没有保留名称的字符
目的被称为无保留。这些包括大写和小写
字母、十进制数字、连字符、句点、下划线和波浪号。
无保留=字母/数字/“-”/“/”\u”/“~”
因为HTTP请求的定义如下:

Method (Space) Request-URI (Space) HTTP-Version CRLF
严格遵守规范的朴素HTTP服务器将执行以下操作:

splitInput = requestLine.Split(' ')

method = splitInput[0]
requestUri = splitInput[1]
httpVersion = splitInput[2]
如果允许在URL中使用空格,则会出现此问题。

因为HTTP请求的名称定义为:

Method (Space) Request-URI (Space) HTTP-Version CRLF
严格遵守规范的朴素HTTP服务器将执行以下操作:

splitInput = requestLine.Split(' ')

method = splitInput[0]
requestUri = splitInput[1]
httpVersion = splitInput[2]

如果在URL中允许使用空格,则会出现这种情况。

在互联网出现之初,一个定义(限制性地)定义了允许的字符,URL很简单,添加空格在许多情况下意味着引用很麻烦。思考如何让URL以空格结尾。;)从域名到IP地址的解析何时发生?浏览器在发送GET请求之前执行此操作,还是在发送GET请求之前将域名解析为IP地址?浏览器必须在发送GET之前打开连接,以便解析域名,通过其IP连接到服务器,并发送GET命令。。。(或多或少^^^)在互联网出现之初,一个定义(限制性地)定义了允许的字符,URL很简单,在许多情况下增加空间意味着繁琐的引用。思考如何让URL以空格结尾。;)从域名到IP地址的解析何时发生?浏览器在发送GET请求之前执行此操作,还是在发送GET请求之前将域名解析为IP地址?浏览器必须在发送GET之前打开连接,以便解析域名,通过其IP连接到服务器,并发送GET命令。。。公平地说,这可能是一个鸡和蛋的问题。HTTP协议之所以看起来像它,是因为URL语法允许它,还是URL被建模为不破坏HTTP语法?HTTP语法可能不同…:)公平地说,这可能是一个鸡和蛋的问题。HTTP协议之所以看起来像它,是因为URL语法允许它,还是URL被建模为不破坏HTTP语法?HTTP语法可能不同…:)这个评论毫无建设性。这个评论毫无建设性。