????????Uniform Resource Identifier(统一资源标识符,URI)定义在RFC 3986中,是一种用于标识互联网上资源的字符串。URI的主要目的是为了标识(不一定是定位)一个资源,这个资源可以是数据、服务,或者是抽象的或物理的实体,而且这个资源可能可以通过互联网访问,也可能不可以。
????????这是资源的唯一名称,用于标识资源,但不提供任何关于如何找到或访问该资源的信息。URN不告诉你如何找到或访问它。比如,书的ISBN号就是一种URN,它唯一标识一本书,但不告诉你在哪里可以买到这本书。
????????URN是永久的、位置独立的标识符,用来确保资源即使在不同位置也能被唯一识别。
????????这是最常见的URI类型,它不仅标识资源,还提供了找到该资源的方法。
????????URL包含了访问资源所需的所有信息,包括协议(如HTTP、FTP)、服务器位置和文件路径。
????????例如,http://www.example.com/index.html 是一个URL,它告诉你资源是通过HTTP协议在`www.example.com`上的`/index.html`路径上找到的。
????????URL包括协议(如HTTP、FTP),服务器的位置和资源在服务器上的具体位置。
????????例如:http://www.cnam.fr:8080/p?q=name=ferret#nose
????????这里是每部分的解释:
????????http:表示方案(scheme),它定义了如何访问资源。在这个例子中,它指定使用HTTP协议
????????www.cnam.fr:是授权部分(authority),通常包含域名和可选的端口号。
????????:8080:这是端口号,用于访问服务器上的特定服务。端口号紧跟在域名后面,用冒号分隔。
????????/p:路径(path),表示服务器上资源的具体位置。它是一个层次结构的路径。
?????????q=name=ferret:查询(query),包含了发送给资源的额外参数,通常用于GET请求中的数据。
????????#nose:片段(fragment),它通常用于指向资源内部的一个锚点(如网页中的一个特定位置)。
????????另一种表达方式,用于定义或描述语言的语法。这种形式是:
????????`URI = scheme ":" [ "//" authority ] path [ "?" query ] [ "#" fragment ]`
????????这种表示方法是一种标准的方式,用来定义URI的不同部分以及它们如何结合在一起形成完整的URI。
????????简而言之,URI是一个通用的资源标识系统,它可以用URN来唯一标识一个资源,或者用URL来提供资源的位置和访问方法。
????????方案(Schémas):它指定了访问资源所使用的互联网协议。例如,`http`表示超文本传输协议,是网页浏览器用来请求网页的标准方式。其他常见的方案包括’https’(安全的http)、`ftp`(文件传输协议)、`mailto`(电子邮件地址)等。
????????层次路径:URI中的“层次路径”是指定如何找到特定资源的路径部分,它根据资源在服务器上的位置不同,有几种不同的格式:
????????这种格式的路径以两个斜线`//`开头。
????????紧接着是“授权部分”,通常包括域名和可选的端口号(比如`www.example.com:80`)。
????????然后是路径部分,它可以为空,或者包含具体的路径信息。
????????这是一个绝对路径,以单个斜线`/`开头。
????????它直接指定从服务器的根目录开始的路径,一直到资源的具体位置。
????????这是一个无根路径,不以斜线开头。
????????它不从服务器的根目录开始,而是从当前路径开始指定资源位置。
????????这是一个空路径,不包含任何字符。
????????它通常用于表示当前的文档或应用程序路径。
????????例如,在URI `http://www.example.com:80/index.html`中:
????????`http` 是指定协议的方案。
????????`www.example.com:80` 是授权部分,包括域名和端口号。
????????`/index.html` 是绝对路径,指定了从服务器根目录到资源的具体路径。
????????简而言之,URI中的层次路径是用来指明如何在互联网上找到一个特定资源的部分,它可以以不同的形式出现,根据资源在服务器上的位置不同而不同。
????????授权部分(Autorité):URI中用来标识资源所在的服务器或主机信息。它通常包含用户信息、服务器地址和端口号。
????????用户信息(Userinfo):通常是用户名,有时还包括密码,用于登录服务器。
????????主机(Host):服务器的地址,可以是IP地址或者域名。
????????端口号(Port):服务器上用来监听网络请求的端口。
????????例如,`root@192.168.0.1:8080`表示用户名是root,服务器地址是192.168.0.1,端口号是8080。
????????路径(Chemin):在服务器上指定资源具体位置的部分。它描述了从服务器的根目录开始到达资源所需经过的目录路径。
????????路径可以是绝对路径,从服务器根目录开始。
????????也可以是相对路径,相对于当前目录或页面。
????????如果没有路径,就是空路径,通常指的是当前目录或页面。
????????查询(Question):这通常指的是一个URI中用于传递参数的部分,可以包括多个参数,每个参数都用`&`符号分隔。这些参数可以是搜索参数、过滤选项或其他形式的数据,用于进一步指定如何访问或显示资源。查询部分在URI中以问号`?`开始,后面跟随参数。参数可以包含字符、数字、某些符号以及斜杠`/`和额外的问号`?`。
????????例如,在URI `http://www.google.fr/search?q=cnam`中,`q=cnam`是查询部分,它告诉服务器用户正在尝试搜索关键字“cnam”。
????????????????片段(Fragment):通常用于指向文档内部的特定部分,如一个网页中的锚点。在浏览器中,片段不会发送到服务器,而是由浏览器本地解释,用来滚动到页面的指定部分。片段在URI中以井号`#`开始,后面跟随锚点标识符。
????????例如,如果一个HTML文档有一个ID为`section1`的部分,那么URI `http://www.example.com/document.html#section1`中的片段`#section1`将指导浏览器滚动到该文档中ID为`section1`的部分。
????????总体来说,查询和片段都是URI的可选部分,用于精确地访问和定位网络资源。
????????URL、URN和URI的概念以及它们之间的关系
????????URL(Uniform Resource Locator):通常被视为资源的“位置”,它描述了资源的访问机制,如何找到并获取资源。
????????URN(Uniform Resource Name):被看作是资源的名字,它独立于资源的位置,即使资源移动了,URN也不会变。
????????URC(Uniform Resource Citation):被认为是资源的元数据的指针,现在这个术语较少使用。
????????在现代互联网标准中,所有这些类型的标识符都被视为URI(Uniform Resource Identifier)的特定类型。
????????URI:是一个统一的概念,用来标识各种资源,无论是通过位置(URL),名称(URN),还是其他方式。
????????例如,一个URL是一个URI,它通过其访问机制(比如HTTP协议)来标识资源。
????????http:` 和 `urn:` 都是URI方案的例子。`http:` 用于标识资源的位置,而`urn:` 用于标识资源的名称。
????????urn:isbn:n-nn-nnnnnn-n` 是一个URN示例,它使用国际标准书号(ISBN)作为书籍的唯一标识。
????????这种统一的视角认为,URI是一个覆盖多种资源标识方式的广泛概念,URL和URN都是这个更广概念下的特定情况。
????????文本说明了URI(统一资源标识符)是什么,以及它的用途:
????????URI:是一种用于在互联网上找到资源(比如文档或服务)的地址。它可以是绝对地址,也可以是相对地址。绝对地址提供了找到资源的完整信息,而相对地址则需要结合当前的上下文来解析。
????????资源定位:URI包含定位信息,这些信息帮助我们识别和定位资源。但是,如果资源移动到了新的位置,URI可能不会更新,因此可能无法追踪到新的位置。
????????非描述性:URI不是用来描述资源内容的,也就是说,它不包含资源的元数据(描述信息)。
????????规范:关于URI的详细规范和信息可以在W3C(万维网联盟)的网站上找到,网址为`http://www.w3.org/Addressing`。
????????总的来说,URI就像互联网上资源的地址,帮助你找到存储在网络某处的资源,但它不提供资源的详细描述。