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为: