主机按原样传输后URL中的字符?

时间:2012-11-17 14:47:55

标签: http

如果我访问网址:

http://foo/bar

网络浏览器将通过端口80上的TCP连接到主机foo并传输GET请求:

GET /bar HTTP...

显然,bar部分中的所有字符都不起作用(逐字传送)。例如空格字符(#20)。

在256个可能的字节中,标准Web浏览器将从输入到GET请求的地址栏中的URL逐字传输(因为没有特殊编码),哪个不是?

1 个答案:

答案 0 :(得分:0)

RFC-3986谈论保留和未保留的字符。无需特殊编码即可使用未保留的字符;其他所有内容都必须使用%xx表示法进行网址编码。

未保留的字符包括大写和小写字母,十进制数字,连字符,句点,下划线和波浪号。

在打开与服务器的套接字连接之前,浏览器非常智能,可以自动转义空格和其他字符。

编辑

当用于预期目的时,不需要对保留字符进行编码。但是,当它们被用作查询字符串或路径组件的一部分时,它们必须是url编码的。

保留字符为! * ' ( ) ; : @ & = + $ , / ? # [ ]

例如,这是一个网址

http://example.com:8090/email/tigerwoods%40gmail.com?folder=sport%2Fgolf

在此处,/?在提供正常角色时不会被编码。但是,@符号会被编码为电子邮件的一部分。 /也被编码为查询字符串参数的一部分。