06Web协议详解-URI编码

142 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情

一、对URI进行编码的原因

  • 平时在使用浏览器的过程中,能看到很多URI中含有大量的百分号和十六进制的编码,这是由于在URI中可能会出现有歧义的字符,为了标准能够正确的被解析,因此要对URI进行编码
  • 例如在下图中的第一个URI中,要查询的关键词是?#!,但这三个字符是URI中的保留字符
  • 第二个URI中的关键词是中文,但URI中不能接收中文
  • 第三个URI中的关键词有'>,在很多代理器中,这种编码方式是有问题的,会直接将这个结果截断
  • 如果对以上三种情况不进行编码,在进行URI解析时就会有问题,因此要对URI中可能产生歧义的数据进行编码 image.png

可能产生歧义性的数据如下:

  1. 不在ASCII码范围内的字符(如中文)
  2. ASCII中不可显示的字符
  3. URI中规定的保留字符
  4. 不安全字符(传输环节中可能会被不正确处理),如空格、引号、尖括号等

二、保留字符与非保留字符

  • 保留字符:如冒号、问号、#号等

image.png

  • 非保留字符:如-号、.号、_号、~号等

image.png

三、URI百分号编码

  • 百分号编码方式 image.png
  • 非ASCII码字符(例如中文):建议先UTR8编码,再US-ASCII编码
  • 对于URI合法字符,编码与不编码是等价的

image.png