• URI URL URN


    URI#

    统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对网络中(一般指万维网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。

    与URL和URN的关系#

    URI可被视为定位符(URL),名称(URN)或两者兼备。统一资源名(URN)如同一个人的名称,而统一资源定位符(URL)代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。

    用于标识唯一书目的ISBN系统是一个典型的URN使用范例。例如,ISBN 0-486-27557-4( urn:isbn:0-486-27557-4 )无二义性地标识出莎士比亚的戏剧《罗密欧与朱丽叶》的某一特定版本。为获得该资源并阅读该书,人们需要它的位置,也就是一个URL地址。在类Unix操作系统中,一个典型的URL地址可能是一个文件目录,例如file:///home/username/RomeoAndJuliet.pdf。该URL标识出存储于本地硬盘中的电子书文件。因此,URL和URN有着互补的作用。

    技术观点#

    URL是一种URI,它标识一个互联网资源,并指定对其进行操作或取得该资源的方法。可能通过对主要访问手段的描述,也可能通过网络“位置”进行标识。例如,http://www.wikipedia.org/这个URL,标识一个特定资源(首页)并表示该资源的某种形式(例如以编码字符表示的,首页的HTML代码)是可以通过HTTP协议从www.wikipedia.org这个网络主机获得的。URN是基于某命名空间通过名称指定资源的URI。人们可以通过URN来指出某个资源,而无需指出其位置和获得方式。资源无需是基于互联网的。例如,URN urn:isbn:0-395-36341-1 指定标识系统(即国际标准书号ISBN)和某资源在该系统中的唯一表示的URI。它可以允许人们在不指出其位置和获得方式的情况下谈论这本书。

    技术刊物,特别是IETF和W3C发布的标准中,通常不再[何时?]使用“URL”这一术语,因为很少需要区别URL和URI。[1] 但是,在非技术文献和万维网软件中,URL这一术语仍被广泛使用。此外,术语“网址”(没有正式定义)在非技术文献中时常作为URL或URI的同义词出现,虽然往往其指代的只是“http”和“https”协议。

    URL(定位符)和URN(名称)方案属于URI的子类,URI可以为URL或URN两者之一或同时是URI和URN。技术上讲,URL和URN属于资源ID;但是,人们往往无法将某种方案归类于两者中的某一个:所有的URI都可被作为名称看待,而某些方案同时体现了两者中的不同部分。

    URI (Universal Resource Identifier:统一的资源标识) :它是以某种统一的(标准化的)方式标识资源的简单字符串。Web上可用的每种资源 - HTML文档、图像、视频片段、程序等 - 由一个通过通
    用资源标志符(Universal Resource Identifier, 简称"URI")进行定位。

    URI一般由三部分组成:

    访问资源的命名机制。
    存放资源的主机名。
    资源自身的名称,由路径表示。
    考虑下面的URI,它表示了当前的HTML 4.0规范:

     http://www.webmonkey.com.cn/html/html40/
    

    这个URI是这样的:这是一个可通过HTTP协议访问的资源,位于主
    机www.webmonkey.com.cn上,通过路径“/html/html40”访问。在HTML文档中
    其它资源包括"mailto"(收发email)和"ftp"(FTP访问)。

    这是URI的另一个例子,指向一个用户的邮箱:

    Joe Cool

    注:大多数读者可能熟悉"URL",而不是URI。URL是RUI命名机制的一个子集。

    片段标志符
    有的URI指向一个资源的内部。 这种URI以"#"结束,并跟着一个anchor标志
    符(称为片段标志符)。例如,下面是一个指向section_2的URI:

    http://somesite.com/html/top.htm#section_2

    相对URI
    相对URI 不包含任何命名规范信息。它的路径通常指同一台机器上的资源。相
    对URI可能含有相对路径(如,“..”表示上一层路径),还可能包含片段标
    志符。

    为了说明相对URI,假设我们有一个基本的URI http://www.acme.com/support/intro.htm

    下面的链接中使用了相对URI:

     <A href="suppliers.htm">Suppliers</A>
    

    它扩展成完全的URI就是 "http://www.acme.com/support/suppliers.htm",
    下面是一个图像的相对URI:

     <IMG src="../icons/logo.gif" alt="logo">
    

    它扩展成完全的URI就是 "http://www.acme.com/icons/logo.gif"。

    在HTML中,URI被用来:

    链接到另一个文档或资源(参看A和LINK元素)。
    链接到一个外部样式表或脚本(参看LINK和SCRIPT元素)。
    在页内包含图像、对象或applet(参看IMAG、OBJECT、APPLET和INPUT
    元素)。
    建立图像映射(参看MAP和AREA元素)。
    提交一个表单(参看FORM)。
    建立一个框架文档(参看FRAME和IFRAME元素)。
    引用一个外部参考(参看Q、BLOCKQUOTE, INS和DEL元素)。
    指向一个描述文档的metadata(参看HEAD元素)。
    URL(Uniform Resoure Locator:统一资源定位器)通俗地说,URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。

    ◇ URL的格式

    URL的格式由下列三部分组成:

    第一部分是协议(或称为服务方式);
    第二部分是存有该资源的主机IP地址(有时也包括端口号);
    第三部分是主机资源的具体地址。,如目录和文件名等。
    第一部分和第二部分之间用“://”符号隔开,第二部分和第三部分用“/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。

    ◇ URL示例

    文件的URL:
    用URL表示文件时,服务器方式用file表示,后面要有主机IP地址、文件的存取路径(即目录)和文件名等信息。有时可以省略目录和文件名,但“/”符号不能省略。
    例一:file://ftp.yoyodyne.com/pub/files/foobar.txt
    代表存放主机ftp.yoyodyne.com上的pub/files/目录下的一个文件,文件名是foobar.txt。
    例二:file://ftp.yoyodyne.com/pub
    代表主机ftp.yoyodyne.com上的目录/pub。
    例三:file://ftp.yoyodyne.com/
    代表主机ftp.yoyodyne.com上的根目录。

    Gopher的URL:
    Gopher服务器有可能使用特殊的端口,在这种情况下,主机IP地址与端口之间要用“:隔开。
    例一:gopher://gopher.yoyodyne.com/
    表示主机gopher.yoyodyne.com上的gopher服务器。
    例二:gopher://gopher.banzai.edu:1234
    表示主机gopher.banzai.edu上的gopher服务器,在端口1234上。

    网络新闻的URL:
    利用URL表示网络新闻组时,如果是usenet的话只要指定出新闻组的名字即可。
    例如:news:rec.gardening
    表示usenet上的rec.gardening新闻组(园艺)。

    HTTP的 URL:
    使用超级文本传输协议HTTP,提供超级文本信息服务的资源。

    URN (Uniform Resource Name, 统一资源名称) : 也用来标识Internet上的资源,但是它们通过使用一个独立于位置的名称来实现。

    三者区别:

    体系中的URI、URL和URN是彼此关联的。URI的范畴位于体系的顶层,URL和URN的范畴位于体系的底层。这种排列显示URL和URN都是URI的子范畴

    URI不能定位或读取/写入资源。这是统一的资源定位器(URL)的任务。URL是一种URI,但是它的大纲组件是已知的网络协议(简称协议),并且它把URI组件与某种协议处理程序(一种资源定位器和根据协议建立的约束规则与资源通讯的读/写机制)。

    URI一般不能为资源提供持久不便的名称。这是统一的资源命名(URN)的任务。URN也是一种URI,但是全球唯一的、持久不便的,即使资源不在存在或不再使用。

    URI是一个更广泛的概念,如URL,URN都是一种URI, 可以说URI是抽象的,而具体使用URL,URN来定位。

    URI是用来标识Internet资源的字符串。 URI严格的与Web上一个对象的Internet地址等价。

    URI,URN以及URL具有相似的目标,因此可以互用。 URI最抽象最概括;因此,它们通常用于技术规范之中。例如URI的语法定义可以作为URN与URL语法定义的基础。 URN最为通用,但是它们依赖命名来查找服务,因此依赖于并非总是可以用的额外的服务。URL最为常用,并且是HTTP与Web软件的基础。

    JAVA中的URI和URL:

    URL和URI都属于JAVA.NET下面的一个类。URI是URL的一个抽象,它不仅包括了统一资源定位符(URL),还包括了统一资源名 (URN).大多数实际应用中使用的URI都是URL,但是许多规范和标准像XML都是用URI来定义的.在java1.4和更新的版本中, URI被java.net.URI 类所表示.这个类与java.net.URL 相比有如下3点重要的区别:
    · URI 类只关心资源的标识和对URI的解析.它没有方法来检索它的URI所标识的资源。
    · URI 类与URL 类相比,它更能适应相关的规范。
    · 一个URI 对象能表示一个相对URI 。URL 类在存放之前,就已经对所有的URI进行了“绝对化”的处理。

    简而言之,一个URL 对象就是网络应用层协议进行网络检索的一个代理,而一个URI 对象就只纯粹地做string的解析和操作的工作。URI 类没有进行网络检索的能力。URL 类有一些进行string解析的方法。比如getFile( ) 和 getRef( ) 方法,但很多都是蹩脚的方法,总是不完全像有关的规范上所说的那样好用。假如你现在用的是java1.4版本或更新的版本,这时你就可以做出选择,如果你 想下载一个URL指示的内容时,你应该使用 URL类;如果你想使用URI类来进行标识的工作而不是用来检索的时候,你应该用URI类。例如,去标识一个XML namespace 的URI。在一些情况下,当你同时需要实现这两种功能时,你可以用方法toURL( ) 把一个URI 转换成一个 URL 。在java1.5中,你还能用类URL 中的方法toURI( ) 把一个URL 转换成一个URI 。
    JAVA中构造一个URI:

      URI 从字符串构建。与 URL 类不同,URI 类不依赖于底层协议处理器。只要是 URI 语法上正确,Java 就不需要为了创建用于表示的 URI 对象而理解其协议。这样,与 URL 类不同,URI 类可以用于新的试验性的URI 模式。

      public URI(String uri) throws URISyntaxException

      这是基本的构造函数,根据任何满足条件的字符串创建一个新的 URI 对象。例如:

      URI voice = new URI("tel:+1-800-9988-9938");
      URI web = new URI("http://www.xml.com/pub/a/2003/09/17/stax.html#id=_hbc");
      URI book = new URI("urn:isbn:1-565-92870-9");

      如果字符串参数不遵循URI 语法( 例如,如果 URI 以冒号开头) 此构造函数将抛出 URISyntaxException 异常。这是一个受查异常,所以需要捕获此异常,或者在调用构造函数的方法中声明并抛出该异常。但是,有一条语法规则不会检查。与 URI 规范不同的是,URI 中使用的字符不限于 ASCII。它可以包括其他 Unicode 字符,如 é。在语法上 URI 没有多少限制,特别是,如果不再需要对非 ASCII 字符编码,并且允许相对 URI 的话,那就真没有什么限制了。几乎所有字符串都可以解释为 URI。

      public URI(String scheme, String schemeSpecificPart, String fragment)   throwsURISyntaxException

      这个构造函数主要用于非层次 URI。模式(scheme)是 URI 的协议,如 http、urn、tel 等等。它必须由ASCII 字母、数字及三个标点字符 +、- 和 . 组成。模式必须以字母开头。若此参数为 null,则省略模式,这样会创建一个相对 URI。例如:

      URI absolute = new URI("http", "//www.ibiblio.org" , null);
      URI relative = new URI(null, "/javafaq/index.shtml", "today");

      模式特有的部分取决于URI 模式的语法;对于 http URI 是一种情况,对于 mailto URI 是另一种情况,对于 tel URI 又是其他情况。因为 URI 类会用百分号转义字符来对无效字符编码,实际上这部分不会有任何语法错误。

      最后,第三个参数包含一个片段标识符(如果存在的话)。再次说明,片段标识符中禁止的字符会被自动转义。为此参数传递 null 就会忽略片段标识符。

      public URI(String scheme, String host, String path, String fragment)
      throws URISyntaxException

      这个构造函数用于层次 URI,如 http 和 ftp URL。主机和路径一起(用/ 分隔)组成 URI 的模式特有部分

      例如:

      URI today= new URI("http", "www.ibiblio.org", "/javafaq/index.html", "today");

      将生成 URI http://www.ibiblio.org/javafaq/index.html#today。如果此构造函数无法根据提供的各部分形成有效的层次 URI(例如,如果存在模式,所以 URI 必须为绝对 URI,但路径没有以 / 开头),那么它将抛出 URISyntaxException 异常。

      public URI(String scheme, String authority, String path, String query,String fragment)   throws URISyntaxException

      这个构造函数与前一个基本相同,只是添加了一个查询字符串部分。例如:

      URI today= new URI("http", "www.ibiblio.org", "/javafaq/index.html",
      "referrer=cnet&date=2004-08-23", "today");

      通常,任何不可转义的语法错误都会导致抛出 URISyntaxException 异常,所有参数都可以传递 null 来忽略这一部分。

      public URI(String scheme, String userInfo, String host, int port, String
      path, String query, String fragment) throws URISyntaxException

      这是前面两个构造函数所调用的主要 URI 构造函数,它有层次性。此方法将授权机构分解为用户信息、主机和端口各部分,每个部分都有自己的语法规则。例如:

      URI styles = new URI("ftp", "anonymous:elharo@metalab.unc.edu","ftp.oreilly.com", 21, "/pub/stylesheet", null, null);

      但是,生成的 URI 仍然必须遵循 URI 的所有通用规则,再次说明,任何参数都可以传入 null,以忽略结果中的这一部分。

      public static URI create(String uri)

      这不是构造函数,而是一个静态工厂方法。与构造函数不同,它不抛出 URISyntax-Exception 异常。如果你确定你的 URI 是有效的,不违反任何规则,就可以使用这个方法。例如,下面的调用将创建使用电子邮件地址作为口令进行匿名 FTP 访问的 URI:

      URI styles =   URI.create("ftp://anonymous:elharo%40metalab.unc.edu@ftp.oreilly.com:21/pub/stylesheet");

      如果此 URI 证明是不正确的,这个方法会抛出一个 IllegalArgumentException 异常。这是运行时异常,所以不必显式声明或捕获它。

  • 相关阅读:
    Saltstack module gem 详解
    Saltstack module freezer 详解
    Saltstack module firewalld 详解
    Saltstack module file 详解
    Saltstack module event 详解
    Saltstack module etcd 详解
    Saltstack module environ 详解
    Saltstack module drbd 详解
    Saltstack module dnsutil 详解
    获取主页_剥离百度
  • 原文地址:https://www.cnblogs.com/zharma/p/4475449.html
Copyright © 2020-2023  润新知