URI:修订间差异
创建页面,内容为“{{Infobox|标题=统一资源标识符|内容={{!}}- ! 中文名 {{!}} 统一资源标识符 {{!}}- ! 英文名 {{!}} Uniform Resource Identifier {{!}}- ! 缩写 {{!}} URI {{!}}- ! 提出者 {{!}} 蒂姆·伯纳斯-李(Tim Berners-Lee) {{!}}- ! 首次定义 {{!}} 1994年(RFC 1630)<ref name="rfc1630">[https://datatracker.ietf.org/doc/html/rfc1630 RFC 1630: Universal Resource Identifiers in WWW]</ref> {{!}}- ! 最新标准 {{!}} RFC 3986…” |
IdleTap-bot(留言 | 贡献) 由旧格式Infobox转换为新参数格式(label/data),修复空信息框(由IdleTap-bot执行) |
||
| (未显示另一用户的1个中间版本) | |||
| 第1行: | 第1行: | ||
{{Infobox| | {{Infobox | ||
| title = 统一资源标识符 | |||
| label1 = 中文名 | |||
| data1 = 统一资源标识符 | |||
| label2 = 英文名 | |||
| data2 = Uniform Resource Identifier | |||
| label3 = 缩写 | |||
| data3 = URI | |||
| label4 = 提出者 | |||
| data4 = 蒂姆·伯纳斯-李(Tim Berners-Lee) | |||
| label5 = 首次定义 | |||
| data5 = 1994年(RFC 1630)<ref name="rfc1630">[https://datatracker.ietf.org/doc/html/rfc1630 RFC 1630: Universal Resource Identifiers in WWW]</ref> | |||
| label6 = 最新标准 | |||
| data6 = RFC 3986(2005年,STD 66)<ref name="rfc3986">[https://datatracker.ietf.org/doc/html/rfc3986 RFC 3986: Uniform Resource Identifier (URI): Generic Syntax]</ref> | |||
| label7 = 子类型 | |||
| data7 = [[URL]]、[[URN]] | |||
}}'''统一资源标识符'''({{lang-en|Uniform Resource Identifier}},缩写:'''URI''')是一个用于标识某一抽象或物理资源的紧凑字符序列<ref name="rfc3986" /><ref name="rfc1630" />。URI由[[蒂姆·伯纳斯-李]]([[Tim Berners-Lee]])提出<ref name="royal-society" />,是[[万维网]]核心基础技术之一<ref name="[[wiki]]-uri">[[wikipedia:Uniform_Resource_Identifier|Uniform Resource Identifier - Wikipedia]]</ref>。URI的最常见形式是[[统一资源定位符]](URL),即网络地址;另一种形式是[[统一资源名称]](URN),仅通过名称标识资源而不涉及位置<ref name="rfc3986" /><ref name="url-urn-diff">[https://cloud.tencent.com.cn/developer/article/2049142 第二十九期:浏览器导航---URI 和 URL]</ref>。URI由[[互联网工程任务组]](IETF)标准化,当前通用语法标准为RFC 3986(2005年),属于[[互联网]]标准STD 66<ref name="rfc3986" /><ref name="std66">[https://www.rfc-editor.org/info/std66 STD 66]</ref>。 | |||
== 历史 == | == 历史 == | ||
URI与URL有着共同的历史渊源。1990年,蒂姆·伯纳斯-李在其关于超文本的提案中引入了使用短字符串作为超链接目标资源标识的概念,当时被称为“超文本名”或“文档名”<ref name="kepu">[https://www.kepuchina.cn/article/articleinfo?business_type=100&classify=0&ar_id=352641 科普中国-URI]</ref><ref name="rfc1630" />。随后三年间,随着万维网核心技术的快速发展,区分“资源定位”与“资源命名”两种字符串的需求逐渐显现<ref name="kepu" />。 | URI与URL有着共同的历史渊源。1990年,蒂姆·伯纳斯-李在其关于超[[文本]]的提案中引入了使用短字符串作为超链接目标资源标识的概念,当时被称为“超文本名”或“文档名”<ref name="kepu">[https://www.kepuchina.cn/article/articleinfo?business_type=100&classify=0&ar_id=352641 科普中国-URI]</ref><ref name="rfc1630" />。随后三年间,随着万维网核心技术的快速发展,区分“资源定位”与“资源命名”两种字符串的需求逐渐显现<ref name="kepu" />。 | ||
1994年6月,IETF发布了RFC 1630,由伯纳斯-李撰写,首次定义了“通用资源标识符”的概念,并指出了URL和URN的存在<ref name="rfc1630" /><ref name="kepu" />。同年12月,RFC 1738正式定义了URL的语法<ref name="rfc1738">[[rfc:1738|RFC 1738: Uniform Resource Locators (URL)]]</ref>。1997年5月,RFC 2141正式统一了URN的定义<ref name="rfc2141">[[rfc:2141|RFC 2141: URN Syntax]]</ref>。 | 1994年6月,IETF发布了RFC 1630,由伯纳斯-李撰写,首次定义了“通用资源标识符”的概念,并指出了URL和URN的存在<ref name="rfc1630" /><ref name="kepu" />。同年12月,RFC 1738正式定义了URL的语法<ref name="rfc1738">[[rfc:1738|RFC 1738: Uniform Resource Locators (URL)]]</ref>。1997年5月,RFC 2141正式统一了URN的定义<ref name="rfc2141">[[rfc:2141|RFC 2141: URN Syntax]]</ref>。 | ||
| 第44行: | 第47行: | ||
* '''协议(Scheme)''':URI的第一部分,由字母开头后跟字母、数字、加号、点号或连字符组成,不区分大小写。协议名称定义了URI的语义和交互协议,常见的有`http`、`https`、`ftp`、`mailto`、`urn`、`file`等<ref name="rfc3986" />。 | * '''协议(Scheme)''':URI的第一部分,由字母开头后跟字母、数字、加号、点号或连字符组成,不区分大小写。协议名称定义了URI的语义和交互协议,常见的有`http`、`https`、`ftp`、`mailto`、`urn`、`file`等<ref name="rfc3986" />。 | ||
* '''层级部分(Hier-part)''':协议之后的内容,通常包含权威机构(Authority)和路径(Path)。权威机构格式为`[userinfo@]host[:port]`,其中userinfo可包含用户名和密码,host为主机名或IP地址,port为端口号<ref name="rfc3986" />。 | * '''层级部分(Hier-part)''':协议之后的内容,通常包含权威机构(Authority)和路径(Path)。权威机构格式为`[userinfo@]host[:port]`,其中userinfo可包含[[用户]]名和密码,host为主机名或IP地址,port为端口号<ref name="rfc3986" />。 | ||
* '''路径(Path)''':由斜杠分隔的字符串序列,表示资源在服务器上的位置<ref name="rfc3986" />。 | * '''路径(Path)''':由斜杠分隔的字符串序列,表示资源在[[服务器]]上的位置<ref name="rfc3986" />。 | ||
* '''查询(Query)''':以问号`?`开头,用于向资源传递参数,通常格式为键值对`key=value`,多个参数间用`&`分隔<ref name="rfc3986" />。 | * '''查询(Query)''':以问号`?`开头,用于向资源传递参数,通常格式为键值对`key=value`,多个参数间用`&`分隔<ref name="rfc3986" />。 | ||
* '''片段(Fragment)''':以井号`#`开头,指向资源内部的特定位置, | * '''片段(Fragment)''':以井号`#`开头,指向资源内部的特定位置,如[[HTML]]文档中的某个锚点。片段信息仅在客户端处理,不会发送至服务器<ref name="rfc3986" />。 | ||
示例URI:`https://www.example.com:443/docs/page.html?lang=zh#section2` | 示例URI:`https://www.example.com:443/docs/page.html?lang=zh#section2` | ||
| 第54行: | 第57行: | ||
== 编码 == | == 编码 == | ||
URI中允许使用的字符仅限于[[ASCII]]字符集的一个子集,包括未保留字符(字母、数字、`-`、`.`、`_`、`~`)和保留字符(`:`、`/`、`?`、`#`、`[`、`]`、`@`、`!`、`$`、`&`、`'`、`(`、`)`、`*`、`+`、`,`、`;`、`=`)<ref name="rfc3986" /><ref name=" | URI中允许使用的字符仅限于[[ASCII]]字符集的一个子集,包括未保留字符(字母、数字、`-`、`.`、`_`、`~`)和保留字符(`:`、`/`、`?`、`#`、`[`、`]`、`@`、`!`、`$`、`&`、`'`、`(`、`)`、`*`、`+`、`,`、`;`、`=`)<ref name="rfc3986" /><ref name="[[go]]ogle-encoding">[https://developers.google.cn/search/docs/crawling-indexing/url-encoding 网址编码 - Google Developers]</ref>。 | ||
对于不在上述范围内的字符(如中文、空格等),需要进行'''百分号编码'''(Percent-encoding):将每个非允许字符的[[UTF-8]]编码字节转换为两位十六进制数,并在其前加上百分号`%`<ref name="rfc3986" /><ref name="google-encoding" />。例如,空格(ASCII 32)编码为`%20`,中文“中国”在UTF-8下编码为`%E4%B8%AD%E5%9B%BD`<ref name="google-encoding" />。 | 对于不在上述范围内的字符(如中文、空格等),需要进行'''百分号编码'''(Percent-encoding):将每个非允许字符的[[UTF-8]]编码字节转换为两位十六进制数,并在其前加上百分号`%`<ref name="rfc3986" /><ref name="[[google]]-encoding" />。例如,空格(ASCII 32)编码为`%20`,中文“中国”在UTF-8下编码为`%E4%B8%AD%E5%9B%BD`<ref name="google-encoding" />。 | ||
== 标准 == | == 标准 == | ||