网址中的空格?

Ric*_*uen 63 url standards http

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

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

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

GET /index.html http/1.1
Run Code Online (Sandbox Code Playgroud)

因此URL如何包含空格?如果可以的话,替换空间的做法+来自哪里?

Gum*_*mbo 92

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

但是语句是对还是错取决于解释:从语法上讲,URI不能包含文字空间,必须对其进行编码; 在语义上,a %20不是空间(显然),但它代表一个空间.

  • @Richard JP Le Guen:这取决于你如何解释它:从语法上讲,URI不能包含文字空间,必须编码; 在语义上,`%20`不是空格(显然),但它代表一个空格. (3认同)

Gab*_*abe 17

他们确实是傻子.如果你看一下RFC 3986附录A,你会发现在定义URL的语法中没有提到"空格".由于在语法中没有提到任何地方,因此编码空间的唯一方法是使用percent-encoding(%20).

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

在某些情况下,可能必须添加额外的空格(空格,换行符,制表符等)以跨行划分长URI.提取URI时应忽略空格.

为了提高稳健性,接受用户类型URI的软件应该尝试识别并删除分隔符和嵌入的空格.

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

  • 在一般情况下,字符"+"不会被HTTP请求过程的任何部分转换为空格(反之亦然).但是,为了简洁起见,它在"application/x-www-form-urlencoded"查询字符串中作为参数值被占用时被翻译成空格,并且通常由浏览器软件优先于'%20`. ,当此类查询字符串附加到请求URI时.当然,HTTP服务器也可以选择将`+`视为URI路径中的空格等效,但标准没有指定. (6认同)

San*_*nda 7

空格被简单地替换为“%20”,例如:

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