URI基础

2020-07-03  本文已影响0人  五月笙

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

"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

总结


使用安全的字符(没有特殊用途或者特殊意义的可打印字符)去表示那些不安全的字符

参考

统一资源标志符

统一资源标志符方案

百分号编码

统一资源定位符

网址URL中特殊字符转义编码

上一篇下一篇

猜你喜欢

热点阅读