2.4 URL 字符

1. URL字符集

  • 从历史上来看,很多计算机 应用程序使用的都是 US-ASCII 字符集。US-ASCII 使用7位二进制码来表示英文打字机提供的大多数按键和少数用于文本格式和硬件通知的不可打印控制字符。
  • 由于 US-ASCII 的历史悠久,所以其可移植性很好。但是,虽然美国用户使用起来很便捷,它却并不支持在各种欧洲语言或全世界数十亿人使用的数百种非罗马语言中很常见的变体字符。而且,有些 URL 中还会包含任意的二进制数据。
  • 认识到对完整性的需求之后,URL 的设计者就将转义序列集成了进去。通过转义序列,就可以用 US-ASCII 字符集的有限子集对任意字符值或数据进行编码了,这样就实现了可移植性和完整性。

2. 编码机制

  • 为了避开安全字符集表示法带来的限制,人们设计了一种编码机制,用来在 URL 中表示各种不安全的字符。
  • 这种编码机制就是通过一种“转义”表示法来表示不安全字符的,这种转义表示法包含一个百分号(%),后面跟着两个表示字符 ASCII 码的十六进制数。
  • 举例:
字符ASCII码示例URL
~126(0x7E)http://www.joes-hardware.com/%7Ejoe
空格32(0x20)http://www.joes-hardware.com/more%20tools.html
%37(0x25)http://www.joes-hardware.com/100%25satisfaction.html

3. 字符限制

  • 在 URL 中,有几个字符被保留起来,有着特殊的含义。
  • 有些字符不在定义的 US-ASCII 可打印字符集中。
  • 还有些字符会与某些因特网网关和协议产生混淆,因此不赞成使用。
  • 下面列出保留及受限的字符,在将其用于保留用途之外的场合时,要在URL中对其进行编码/转义:
字符保留/受限
%保留作为编码字符的转义标志
/保留作为路径组件中分隔路径段的定界符
.保留在路径组件中使用
..保留在路径组件中使用
#保留作为分段定界符使用
?保留作为查询字符串定界符使用
;保留作为参数定界符使用
:保留作为方案、用户 / 口令,以及主机 / 端口组件的定界符使用
$ +保留
@ & =在某些方案的上下文中有特殊的含义,保留
{}\ ^ ~ [] ‘
<> “不安全;这些字符在 URL 范围之外通常是有意义的,比如在文档中对 URL 自身进行定界(比如 http://www.joes-hardware.com),所以应该对其进行编码
0x00-0x1F, 0x7F受限,这些十六进制范围内的字符都在 US-ASCII 字符集的不可打印区间内
大于0x7F受限,十六进制值在此范围内的字符都不在 US-ASCII 字符集的 7 比特范围内

4. 说明

  • 对某些传输协议来说,使用一些不安全字符的时候并没有发生什么不好的事情,比如: http://www.joes-hardware.com/~joe ,但对应用程序开发人员来说,对非安全字符进行编码仍然是明智的。
  • 总之,只应该对在传输过程中不安全的字符进行编码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值