为了账号安全,请及时绑定邮箱和手机立即绑定

URL允许包含空格吗?

URL允许包含空格吗?

米脂 2019-06-24 13:00:12
URL允许包含空格吗?URI(特别是HTTPURL)是否允许包含一个或多个空格字符?如果URL必被编码,是+只是一个普遍遵循的惯例,还是一个合法的选择?特别是,有人是否可以指向RFC,该RFC指示具有空格的URL必被编码了?提出问题的动机:在测试网站时,我注意到有些URL是用空格构建的。火狐似乎做了正确的事情,这让我吃惊!但我希望能够将开发人员指向RFC,以便他们能够感觉到修复这些URL的必要性。
查看完整描述

3 回答

?
达令说

TA贡献1821条经验 获得超6个赞

RFC 1738:

不安全:

由于多种原因,字符可能是不安全的。空间字符是不安全的,因为重要的空格可能会消失,当URL被转录或排版或接受文字处理程序处理时,可能会引入不重要的空间。人物"<"">"是不安全的,因为它们被用作自由文本中URL周围的分隔符;引号(""")用于分隔某些系统中的URL。人物"#"是不安全的,因此应该始终对其进行编码,因为它在万维网和其他系统中用于分隔可能后面的片段/锚标识符中的URL。人物"%"不安全,因为它用于对其他字符进行编码。其他字符是不安全的,因为网关和其他传输代理有时会修改这些字符。这些字符是"{""}""|""\""^""~""[""]",和"`".

所有不安全字符必须始终在URL中编码..例如,字符"#"即使在通常不处理片段或锚标识符的系统中,也必须在URL中进行编码,以便如果URL被复制到使用它们的另一个系统中,则无需更改URL编码。


查看完整回答
反对 回复 2019-06-24
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

为什么要编码?请求如下:

GET /url HTTP/1.1(Ignoring headers)

有3个字段被一个空白隔开。如果你在你的网址里放了一个空格:

GET /url end_url HTTP/1.1

您知道有4个字段,HTTP服务器会告诉您它是一个无效的请求。

GET /url%20end_url HTTP/1.1

3字段=>有效

注意:在查询字符串(后面?)中,空格通常编码为+。

GET /url?var=foo+bar HTTP/1.1

而不是

GET /url?var=foo%20bar HTTP/1.1


查看完整回答
反对 回复 2019-06-24
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

URL定义为RFC 3986,尽管其他的RFCs也是相关的,但是RFC 1738已经过时了。

他们可能没有空格,以及许多其他字符。由于这些禁止字符通常需要以某种方式表示,所以有一种将它们转换为带有“%”前缀的ASCII十六进制等价的URL的方案。

大多数编程语言/平台提供编码和解码URL的功能,尽管它们可能不符合RFC标准。例如,我知道PHP没有。


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 3118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信