url空间?

w3fools声称URL可以包含空格: http : //w3fools.com/#html_urlencode

这是真的? 一个URL如何包含一个未编码的空间?

我感觉HTTP请求的请求行使用空格作为分隔符,格式为{the method}{space}{the path}{space}{the protocol}

 GET /index.html http/1.1 

那么URL如何包含一个空格呢? 如果可以的话,用+代替空格的做法是从哪里来的?

一个URL不能包含文字空间。 它必须使用百分比编码或使用URL安全字符的不同编码进行编码(如application / x-www-form-urlencoded ,而不是空格使用%20 )。

但是,声明是对还是错,取决于解释:在句法上,一个URI不能包含一个文字空间,它必须被编码。 在语义上, %20不是一个空格(显然),但它代表一个空格。

他们确实是个傻瓜。 如果你看RFC 3986的附录A,你会发现在定义一个URL的语法的任何地方都没有提到“space”。 由于在语法中没有提及任何地方,编码空间的唯一方法是使用百分比编码( %20 )。

事实上,RFC甚至指出空格是分隔符,应该被忽略:

在某些情况下,可能需要添加额外的空格(空格,换行符,制表符等)以跨行打破长URI。 提取URI时应该忽略空白。

为了健壮性,接受用户types的URI的软件应该尝试识别并去除分隔符和embedded的空白。

奇怪的是,在RFC中没有提到使用+作为空间编码,尽pipe它被保留为子分隔符。 我怀疑它的使用不是公约就是被不同的RFC(可能是HTTP)所覆盖。

那里的信息我认为是部分正确的:

这不是真的。 一个URL可以使用空格。 没有定义空格被replace为+符号。

正如你所说,一个URL不能使用空格。 HTTP请求会被搞砸。 我不确定+的定义在哪里,但%20是标准的。

空格被“%20”简单地replace为:

http://www.example.com/my%20beautiful%20page