URI(特别是HTTP URL)是否允许包含一个或多个空格字符?
发布于 2018-04-02 17:20:01
根据RFC 1738:
不安全: 字符可能由于多种原因而不安全。 空格字符是不安全的,因为重要的空格可能消失,并且当URL被转录或排版或受到文字处理程序的处理时可能引入不重要的空格。 字符
"<"
和">"
,因为它们被用作在周围自由文本网址的分隔符是不安全的; 引号("""
)用于在某些系统中分隔URL。该字符"#"
不安全,应始终进行编码,因为它在万维网和其他系统中用于从可能遵循它的片段/锚点标识符中分隔URL。人物"%"
是不安全的,因为它用于其他字符的编码。其他字符是不安全的,因为网关和其他传输代理有时会修改这些字符。这些字符是"{"
,"}"
,"|"
,"\"
,"^"
,"~"
,"["
,"]"
,和"`"
。 所有不安全的字符必须始终在URL中进行编码。例如,"#"
即使在通常不处理片段或锚点标识符的系统中,字符也必须在URL中进行编码,以便如果URL被复制到使用它们的另一个系统中,则不需要更改URL编码。
发布于 2018-04-02 18:20:46
为什么它必须被编码?请求看起来像这样:
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
https://stackoverflow.com/questions/-100003767
复制相似问题