URI维基翻译

下文是对维基百科中URI介绍的粗略翻译。原文

Uniform Resource Identifier统一资源标识符

在信息技术领域,URI(Uniform Resource Identifier)是由字符组成的用来标识资源的字符串。
这种标识可以让我们通过使用特定的协议与网络上的资源进行交互,典型的就是万维网(World Wide Web)上的资源。每个URI都有一个特定的格式来定义,这种格式指定了具体的语法和与之相关的协议。URI最常见的形式是URL(Uniform Resource Locator),成为统一资源定位符,经常非正式的称为网络地址。URI的另一种不常见的用途是URN(Uniform Resource Name),称为统一资源名称。URN被设计用来作为URL的补充,它提供了一种在特定的名称空间中标识资源的机制。

URI、URL和URN的关系

对于一个资源来说,URN就好比他的名字,而URL就好比是资源的街道住址。换句话说,URN标识了一个资源项目,而URL则提供了一种找到他的方法。

作为URI的一种,URL不仅标识的一个资源,还提供了如何与这个资源进行交互或者如何得到这个资源的方法,比如同时指定基本的获取机制和网络位置。举个例子,http://example.org/wiki/Main_Page,指向了一个被识别为/wike/Main_Page的资源,这个资源的表现形式是HTML和相关的代码。而获取这个资源的方法是在网络中从一个名为example.org的主机上,通过HTTP( Hypertext Transfer Protocol)获得。

而URN则是一种在特定的名称空间中通过通过名字来标识资源的URI。当讨论一种资源而不需要知道它的位置或者如何去获得它的时候,就可以使用URN。例如,在International Standard Book Number (ISBN)系统中,* ISBN 0-486-27557-4 用来指定莎士比亚的作品《罗密欧与朱丽叶》的一个特定版本。指示这一版本的URN是urn:isbn:0-486-27557-4*,如果想要获得这个版本的书,就需要知道它的位置,这样就必须知道它的URL。

概念区分

技术刊物,尤其是由IEFW3C制定的标准,通常使用由2001版的W3C推荐标准所陈述的观点。这种观点承认URI的概念而不支持将URI正式划分为URL和URN.

URL是一种有用但并不正式的概念:URL是这样一种URI,它通过对一种资源的基本获得机制的陈述来标识这种资源,比如这种资源在网络中的“位置”,而不是通过这种资源含有的其他属性来标识资源。

URL是一种URI,而它刚好在网络中指向一个资源。

然而在非技术背景下以及在万维网的软件中,URL这个术语的应用相当广泛。并且,web address(它并没有正式的定义)这个术语经常出现在非技术的刊物中,它被当做使用http或者https格式的URI的同义词。这样的设想经常会引起混淆,比如XML的名称空间,它和可解析的URI非常相似。

尽管大多数URI格式被设计的时候是带有特定的协议的,并且通常带有相同的名字,但是在语法上它们和协议仍是不同的。比如,http格式的URI用来通过HTTP协议和网络资源进行交互,然而file格式的URI却并没有特定的协议。

语法

在1998年8月出版的 Request for Comments (RFC) 2396中,第一次定义了通用的URI和绝对URI引用的语法。其最终成型是在2005年1月出版的RFC 3986

通常的URI格式如下:

 scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]

它包括以下部分:

  • scheme,由字母开头后面跟着数字,+,.-。尽管scheme对大小写不敏感,但权威的使用方式是使用小写字母,并且相关的文档也应该使用小写字母。他的后面会跟着:。常见的格式包括http(s),ftp,mailto,file,datairc。URI格式应该在 Internet Assigned Numbers Authority (IANA)注册,尽管不注册的有的也正在实际中使用。

  • 双斜杠//: 有些格式中必须使用,而有的则不需要。当缺少认证部分(下面会有解释)时,URI的路径部分不能以//开头。

  • 认证部分authority part,, 包括

    • 由用户名和密码组成的认证部分,用户名和密码之间使用:分割,并且密码后面跟着@符号
    • host,由一个已经注册的名字(包括但不限于hostname)或者一个IP地址组成。IPV4地址应该是由.连接的十进制格式,IPV6地址应该用方括号[]包起来。
    • 可选的端口号,使用:和主机名分隔开。
  • 路径path,路径中包含着数据。数据以分层的形式组织起来,通常表现为通过/连接。这和文件系统的路径很相似,但是这种路径的层级关系并不和文件系统路径的层级关系一摸一样。如果有认证部分的话,路径需要以/开头,如果没有认证部分,那么路径不能以//开始。路径总是会被定义的,不过有时候可能是空,所以URI的结尾没有/

  • 一个可选的查询query部分,和之前的部分以?分割,包含有非层级关系的查询字符串,查询字符串的语法并没有准确的定义,一般是由一组组的键值对通过特定的界定符连接起来。

    查询界定符 例子
    & key1=value1&key2=value2
    ; key1=value1;key2=value2
  • 一个可选的片段frament,通过#和前面的部分分开。片段包含一个片段标识符,用来提供二级资源的方向,比如被URI标识的一篇文章中的某个章节的标题。当基本资源是一个HTML文档时,片段通常是某个特定元素的id属性,并且浏览器会将该元素滚动到视野中。

URI中一个字节的字符串以字符的形式出现,URI中合法的字符是ASCII字符,这些字符可以表示现代英语字母表中的大写字母和小写字母,阿拉伯数字,连字符(hyphen),句号(period),下划线(underscore)和波浪号(tilde)。八位字节的其他字符必须使用百分数编码进行表示。

ASCII字符集中的其他符号字符,/ ? # [ ] @,作为保留字符,在URI的组成部分之间当作分隔符使用,所以出现的这些字符必须使用百分数编码,比如%3F用来表示问好?

按照一般的URI语法,! $ & ' ( ) * + , ; =这些字符可以在用户信息(user information),主机(host)和路径(path)中,作为分隔符,被无编码的合法使用。

:@可以无编码的出现在路径(path),查询字符串(query)和片段(fragment)中;?/可以无编码的出现在查询字符串(query)和片段(fragment)中。

例子

下面是URI组成的两个例子:

                    hierarchical part
        ┌───────────────────┴─────────────────────┐
                    authority               path
        ┌───────────────┴───────────────┐┌───┴────┐
  abc://username:password@example.com:123/path/data?key=value&key2=value2#fragid1
  └┬┘   └───────┬───────┘ └────┬────┘ └┬┘           └─────────┬─────────┘ └──┬──┘
scheme  user information     host     port                  query         fragment


  urn:example:mammal:monotreme:echidna
  └┬┘ └──────────────┬───────────────┘
scheme              path

URI引用

URI引用的形式可以是完整的URI,可以是完整URI的格式指定部分,还可以是完整URI的后面的部分,或者是空字符串。以#引导的可选的片段标识可能出现在URI引用的结尾部分。引用中#前面的部分间接地标识了一个资源,片段标识部分标识了这个资源的一部分。

为了从URI引用中得到URI,软件通过使用特定的算法将URI引用和基准URI合并来将其转化为绝对形式。系统将URI引用当作基准URI的相对部分,虽然在绝对引用的情况下,基准URI并没有什么相关性。如果基准URI当中包含有片段标识,在合并过程中,它会被忽略。如果片段标识出现在URI引用中,那么在合并过程中它会被保留。

Web文档标记语言经常使用URI引用来指向其他资源,比如外部文档,或者逻辑上属于同一个文档的其他部分。

标记语言中的例子

  • HTML文档中,imgsrc属性的值,alink元素的href属性的值
  • In XML, the system identifier appearing after the SYSTEM keyword in a DTD is a fragmentless URI reference.
    XML文档中,在DTD中,出现在SYSTEM关键字后面的系统标识符,是没有片段的URI引用
  • In XSLT, the value of the href attribute of the xsl:import element/instruction is a URI reference; likewise the first argument to the document() function.

绝对URI的例子

URI引用的例子

  • https://example.org/absolute/URI/with/absolute/path/to/resource.txt
  • //example.org/scheme-relative/URI/with/absolute/path/to/resource.txt
  • //example.org/scheme-relative/URI/with/absolute/path/to/resource
  • /relative/URI/with/absolute/path/to/resource.txt
  • relative/path/to/resource.txt
  • ../../../resource.txt
  • ./resource.txt#frag01
  • resource.txt
  • #frag01

URI解析

解析URI就是将其从相对URI转换为绝对形式,或者通过试图得到这个资源来解除对它的引用。

同文档引用就是一个指向包含它本身的文档的URI引用。当一个URI引用被解析为绝对形式后,它的基准URI和文档的基准URI实际上相同时,那么它被定义为同文档引用。当遇到同文档引用时,文档处理软件,比如web浏览器,将使用当前的文档来满足对指向当前文档的引用的解析,而不是获得新的文档。当一个URI引用,虽然对基准URI来说不完全相同,但是指向了同一个资源时,它被称为等价URI。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • (原话)谈谈对HTTP协议的理解:超文本传输协议,应用于OSI网络模型中的应用层,是用于服务器传输超文本到本地浏览...
    24_yu阅读 878评论 0 1
  • iOS网络编程读书笔记 Facade Tester客户端门面模式的实例(被动版本化) 被动版本化,所以硬编码URL...
    melouverrr阅读 1,602评论 3 7
  • 翻译约定 primary data: 主数据resource identifier object 资源标识符对象r...
    sladeliu阅读 2,382评论 0 2
  • 一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式。”但是在要求详细讲述它所提出的各个约束,以及如...
    时待吾阅读 3,417评论 0 19