URL允许包含空格吗?

URL允许包含空格吗?

URI(特别是HTTPURL)是否允许包含一个或多个空格字符?如果URL被编码,是+只是一个普遍遵循的惯例,还是一个合法的选择?

特别是,有人是否可以指向RFC,该RFC指示具有空格的URL被编码了?

提出问题的动机:在测试网站时,我注意到有些URL是用空格构建的。火狐似乎做了正确的事情,这让我吃惊!但我希望能够将开发人员指向RFC,以便他们能够感觉到修复这些URL的必要性。


米脂
浏览 3119回答 3
3回答

达令说

按RFC 1738:不安全:由于多种原因,字符可能是不安全的。空间字符是不安全的,因为重要的空格可能会消失,当URL被转录或排版或接受文字处理程序处理时,可能会引入不重要的空间。人物"<"和">"是不安全的,因为它们被用作自由文本中URL周围的分隔符;引号(""")用于分隔某些系统中的URL。人物"#"是不安全的,因此应该始终对其进行编码,因为它在万维网和其他系统中用于分隔可能后面的片段/锚标识符中的URL。人物"%"不安全,因为它用于对其他字符进行编码。其他字符是不安全的,因为网关和其他传输代理有时会修改这些字符。这些字符是"{",&nbsp;"}",&nbsp;"|",&nbsp;"\",&nbsp;"^",&nbsp;"~",&nbsp;"[",&nbsp;"]",和"`".所有不安全字符必须始终在URL中编码..例如,字符"#"即使在通常不处理片段或锚标识符的系统中,也必须在URL中进行编码,以便如果URL被复制到使用它们的另一个系统中,则无需更改URL编码。

胡子哥哥

为什么要编码?请求如下:GET&nbsp;/url&nbsp;HTTP/1.1(Ignoring&nbsp;headers)有3个字段被一个空白隔开。如果你在你的网址里放了一个空格:GET&nbsp;/url&nbsp;end_url&nbsp;HTTP/1.1您知道有4个字段,HTTP服务器会告诉您它是一个无效的请求。GET&nbsp;/url%20end_url&nbsp;HTTP/1.13字段=>有效注意:在查询字符串(后面?)中,空格通常编码为+。GET&nbsp;/url?var=foo+bar&nbsp;HTTP/1.1而不是GET&nbsp;/url?var=foo%20bar&nbsp;HTTP/1.1

江户川乱折腾

URL定义为RFC 3986,尽管其他的RFCs也是相关的,但是RFC 1738已经过时了。他们可能没有空格,以及许多其他字符。由于这些禁止字符通常需要以某种方式表示,所以有一种将它们转换为带有“%”前缀的ASCII十六进制等价的URL的方案。大多数编程语言/平台提供编码和解码URL的功能,尽管它们可能不符合RFC标准。例如,我知道PHP没有。
打开App,查看更多内容
随时随地看视频慕课网APP