UP | HOME

URI - 统一资源标识符

目录

1 URI & URL & URN

URI, URL 和 URN 是三个经常放在一起的概念,下面这段摘自 RFC 文档的一段话描述了它们之间的关系:

A URI can be further classified as a locator, a name, or both. ]

更形象地,可以用维基百科上的一张图来说明:

而下面这段摘自维基百科的一段话,表明了 URLURN 的作用:URL 标识资源位置,而 URN 标识资源身份。

A URN may be compared to a person's name, while a URL may be compared to their street address. In other words, a URN identifies an item and a URL provides a method for finding it.]

由于这篇博客的主题为 URI, 因此只在这里简单的提及一下 URLURN, 如果需要详细了解,可以自己 Google 相关资料。

2 URI 通用语法

URI 的通用语法由五个组件组成:

URI = scheme:[//authority]path[?query][#fragment]

其中,authority 组件可以由以下三个组件组成:

authority = [userinfo@]host[:port]

实际的例子:

          userinfo     host        port
          ┌─┴────┐ ┌────┴────────┐ ┌┴┐ 
  https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top
  └─┬─┘ └───────┬────────────────────┘└─┬─────────────┘└──┬───────────────────────┘└┬─┘  
  scheme     authority                 path              query                      fragment

  ldap://[2001:db8::7]/c=GB?objectClass?one
  └─┬┘ └───────┬─────┘└─┬─┘ └──────┬──────┘
 scheme    authority  path       query

  mailto:John.Doe@example.com
  └──┬─┘ └─────────┬────────┘
  scheme         path

  news:comp.infosystems.www.servers.unix
  └─┬┘ └───────────────┬───────────────┘
 scheme              path

  tel:+1-816-555-1212
  └┬┘ └──────┬──────┘
scheme     path

  telnet://192.0.2.16:80/
  └──┬─┘ └──────┬──────┘│
  scheme    authority  path

  urn:oasis:names:specification:docbook:dtd:xml:4.1.2
  └┬┘ └──────────────────────┬──────────────────────┘
scheme                     path

3 URI 协议

这才是写这篇博客的主要目的,前面的内容都是顺带的,不然总感觉差点啥 @_@.

3.1 file

file 应该算是一个比较常用的协议了,它的格式如下:

file://host/path

需要注意的一点是,在 Windows 系统中,需要在实际文件路径的 盘符 前添加一个斜杠才能作为 URI 中的路径:

file:///C:/Users/Administrator/Desktop/example.txt

上面这个省略了 hostURI 标识的文件为:

C:/Users/Administrator/Desktop/example.txt

由于这种在 Windows 上不太自然的路径表示形式,是容易让人感到迷惑的。

3.2 mailto

mailto 是用来表示邮箱地址的 URI 协议,常见的形式为:

mailto:someone@example.com

通过 query 部分指定一些初始值:

mailto:someone@example.com?subject=xxx&cc=someone_else@example.com&body=xxx

指定多个邮箱地址:

mailto:someone@example.com,someoneelse@example.com

mailto 的完整语法还是有点复杂的,有兴趣的可以了解一下。

3.3 data

data 在前端应该也是比较常用的一个协议了,提供了一种在网页中包含数据的方法,格式如下:

data:[<media type>][;base64],<data>

各部分的含义:

  • media type - 可选,指定媒体类型,格式为 attribute=value, 用 ; 分隔
  • base64 - 可选,通过 ; 与前面的内容分隔,表示 URI 的数据内容是二进制数据,通过 base64 将二进制数据编码为 ASCII 文本
  • data - 包含的数据,使用 , 与前面的内容分隔

一个最小的 data URI:

data:,

data 协议可以包含的数据类型很多,常用的是直接在网页连接中包含图片:

<img src="data:image/png;base64,iVBORw0KGgoAAA
ANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4
//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU
5ErkJggg==" alt="Red dot" />

更多的媒体类型可以通过查阅相关资料进行了解。

4 参考链接

版权声明:本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可