如果我访问网址:
http://foo/bar
网络浏览器将通过端口80上的TCP连接到主机foo
并传输GET请求:
GET /bar HTTP...
显然,bar
部分中的所有字符都不起作用(逐字传送)。例如空格字符(#20)。
在256个可能的字节中,标准Web浏览器将从输入到GET请求的地址栏中的URL逐字传输(因为没有特殊编码),哪个不是?
答案 0 :(得分:0)
RFC-3986谈论保留和未保留的字符。无需特殊编码即可使用未保留的字符;其他所有内容都必须使用%xx表示法进行网址编码。
未保留的字符包括大写和小写字母,十进制数字,连字符,句点,下划线和波浪号。
在打开与服务器的套接字连接之前,浏览器非常智能,可以自动转义空格和其他字符。
编辑
当用于预期目的时,不需要对保留字符进行编码。但是,当它们被用作查询字符串或路径组件的一部分时,它们必须是url编码的。
保留字符为! * ' ( ) ; : @ & = + $ , / ? # [ ]
例如,这是一个网址
http://example.com:8090/email/tigerwoods%40gmail.com?folder=sport%2Fgolf
在此处,/
和?
在提供正常角色时不会被编码。但是,@
符号会被编码为电子邮件的一部分。 /
也被编码为查询字符串参数的一部分。