URI基础
URI、URL和URN
URI(Uniform Resource Identifier) : 标识
URL(Uniform Resource Locator) : 定位
URN(Uniform Resource Name) : 名称
例子:
http://example.org/absolute/URI/with/absolute/path/to/resource.txt
ftp://example.org/resource.txt
urn:issn<XSLT>:1535-3613
组成
例如:
foo://username:password@example.com:8042/over/there/index.dtb?type=animal;name=ferret#nose
\ / ________________/_________/ _/ _/ _/ _____________________/ _/
| | | | | | | |
| 用户 主机 端口 | | 查询 片段
| _______________________________/ _____________|____|/
方案 | | | |
| 域名 路径 | |
| | |
| 路径 可以解释为文件名
| ___________|____________ |
/ \ / \ |
urn:example:animal:ferrett:nose 可以解释为扩展名
"http" 指定协议名, "en.wikipedia.org"是“典据”, "/wiki/URI"是指向英文维基页面的“路径”,而"#Examples_of_URI_references"是指向英文维基页面相应片段的“URI”
参考:
百分比编码
规则
URL编码格式采用的是ASCII码
RFC3986文档规定,URL中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。
参考:RFC3986
未保留字符:未保留字符不需要百分号编码
保留字符:具有特殊含义的字符
! * ' ( ) ; : @ & = + $ , / ? # [ ]
不安全字符:直接放在URL中,可能会引起解析程序的歧义,例如:空格,#
方法
把字符的ASCII的值表示为两个16进制的数字,然后在其前面放置转义字符("%"),置入URI中的相应位置
对于非ASCII码字符,需要转换为UTF8字节序
例如 -> "#":
保留字符:书签或锚点
参数传递:%23
示例:https://zh.wikipedia.org/wiki/%E7%BB%9F%E4%B8%80%E8%B5%84%E6%BA%90%E6%A0%87%E5%BF%97%E7%AC%A6#URI%E5%BC%95%E7%94%A8%E7%9A%84%E4%BE%8B%E5%AD%90
总结
使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符