1

如果我访问 URL:

http://foo/bar

然后,Web 浏览器将foo通过 TCP 在端口 80 上连接到主机并发送 GET 请求:

GET /bar HTTP...

显然,并非该bar部分中的所有字符都可以使用(逐字传输)。例如空格字符 (#20)。

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

4

1 回答 1

0

RFC-3986讨论了保留和非保留字符。可以使用未保留的字符,无需特殊编码;其他所有内容都必须使用 %xx 符号进行 url 编码。

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

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

编辑

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

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

例如,这里是一个 url

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

在这里,当它们发挥正常作用时,/并没有被编码。?但是,该@符号被编码为电子邮件的一部分。/也被编码为查询字符串参数的一部分。

于 2012-11-18T06:59:02.223 回答