uri_uriencoding - CSDN
uri 订阅
在电脑术语中,统一资源标识符(Uniform Resource Identifier,URI)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。Web上可用的每种资源 -HTML文档、图像、视频片段、程序等 - 由一个通用资源标识符(Uniform Resource Identifier, 简称"URI")进行定位。 展开全文
在电脑术语中,统一资源标识符(Uniform Resource Identifier,URI)是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。Web上可用的每种资源 -HTML文档、图像、视频片段、程序等 - 由一个通用资源标识符(Uniform Resource Identifier, 简称"URI")进行定位。
信息
英文缩写
URI
应    用
万维网
外文名
Uniform Resource Identifier
释    义
是一个用于标识某一互联网资源名称的字符串
中文名
统一资源标识符
性    质
电脑术语
URI历史
URI与URL有着共同的历史。在1990年,Tim Berners-Lee的关于超文本的提案间接地引入了使用URL作为一个表示超链接目标资源的短字符串的概念。当时,人们称之为“超文本名”或“文档名”。在之后的三年半中,由于万维网的HTML(超文本标记语言)核心技术、HTTP与浏览器都得到了发展,区别提供资源访问和资源标记的两种字符串的必要性开始显现。虽然其时尚未被正式定义,但“统一资源定位符”这一术语开始被用于代表前者,而后者则由“统一资源名称”所表示。在关于定义URL和URN的争论中,人们注意到两者事实上基于同一个基础的“资源标识”的概念。在1994年6月,IETF发布了Berners-Lee的RFC 1630,(非正式地)指出了URL和URN的存在,并进一步定义了“通用资源标识符”——语义和语法由具体协议规定的类URL字符串的规范文法。此外,该RFC文档亦尝试定义了其时正被使用着的URL协议的文法,同时指出(但并未标准化)了相对URL和片段标识符的存在。1994年12月,RFC 1738 正式定义了绝对和相对URL,改进了URL文法,定义了如何解析URL为绝对形式,并更加完善地列举了其时正处于使用中的URL协议。而URN定义和文法直到1997年5月RFC 2141公布后才正式统一。1998年8月,随着RFC 2396的发表,URI文法形成了独立的标准,同时RFC 1630和1738中关于URI和URL的许多部分也得到了修订和增补。新RFC修改了“URI”中“U”的含义:它开始代表统一(Uniform)而不再是通用(Universal)。RFC 1738中总结了既存URL协议的部分被移至另外一篇独立文档中。IANA 保留着这些协议的注册信息,而RFC 2717首次描述了注册它们的流程。在1999年12月,RFC 2732对RFC 2396进行了小幅更新,开始允许URI包括IPv6地址。一段时间以后,在两个标准中暴露出的一些问题促使了一系列的修订草案的发展,这些草案被统称为rfc2396bis。这一由RFC 2396的共同作者Roy Fielding引导协调的集体努力,由2005年1月RFC 3986的发布推至了顶峰。该RFC文档成为了现今(2009年)于互联网上被推荐使用的URI文法版本,并使得RFC 2396成为了历史。然而,它却并未替代现有的URL协议细节;RFC 1738继续管辖着大多数协议,除了某些已被它取而代之的场合——例如被RFC 2616改良的”HTTP”协议等。与此同时,IETF发布了RFC 3986,亦即完整的STD 66标准,标识着URI通用文法正式成官方因特网协议。在2002年8月,RFC 3305指出,虽然术语“URL”仍被广泛地用于日常用语之中,但其本身已几乎被废弃。其功用,仅是作为对于某些URI因包含某种指示着网络可达性的协议而作为地址存在的提醒而已。基于URI的众多标准,例如资源描述框架等,已经清楚地表明,资源标识本无需指出通过互联网获得资源副本的方法,亦无须指出资源是否基于网络。在2006年2月,RFC 4395用了15页详细阐述了《关于新的URI方案的指导方针和登记程序》 [1]  在2006年11月1日,W3C技术架构小组公布了《连接替代副本使查找和发布可行化》,一个对于发布给定资源的多个版本的权威URI和其最佳实践的指导。例如,内容可能因用于访问资源的设备的支持性和设定不同,而语言或大小上有所调整已适应这种差异。
收起全文
精华内容
参与话题
  • URL和URI的详细区分(带实例)

    万次阅读 2015-10-08 18:14:10
    这段时间写android的时候用到了URL和URI,有点分不清楚,于是做了一个系统性的学习。在这里将自己的学习笔记粘贴出来,希望对大家有帮助。 1)Java类库里有两个对应的类java.net.URL和java.net.URI,官方的定义分别...

    1说明:

    这段时间写android的时候用到了URLURI,有点分不清楚,于是做了一个系统性的学习。在这里将自己的学习笔记粘贴出来,希望对大家有帮助。

    1)Java类库里有两个对应的类java.net.URL和java.net.URI,官方的定义分别如下:

    (URL)A Uniform Resource Locator thatidentifies the location of an Internet resource as specified by RFC 1738.(统一资源定位符用于标示网络资源的位置)

    (URI,统一资源标识符)A Uniform Resource Identifier that identifies an abstract or physical resource, as specified by RFC 2396.(统一资源标识符用于标示一个抽象或者物理资源)

    2)也就是说URI是以一种抽象的,高层次概念定义统一资源标识,而URL则是具体的资源标识的方式。URL是一种URI。

    3)URL,URI具体定义方式(来自android官方文档)


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

    第一部分是协议(或称为服务方式);

    第二部分是存有该资源的主机IP地址(有时也包括端口号);

    第三部分是主机资源的具体地址。

    URI一般由三部分组成:

    访问资源的命名机制。

    存放资源的主机名。

    资源自身的名称,由路径表示。

    4)在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的,schema(protocol)必须被指定。

    2举例:

    1) 大家平常用图片的时候。到底是imgUrl好呢,还是imgUri好?显然,如果说imgUrl是肯定没问题的,因为即使它实际上是url,那它也是uri的一种。那么用imgUri

    有没有问题呢?此时则要看它的可能取值,如果是绝对路径,能够定位的,那么用imgUri是没问题的,而如果是相对路径,那还是不要用ImgUri的好。总之,用imgUrl是肯定没问题的,而用imgUri则要视实际情况而定。

    2)StringHttpServletRequest.getRequestURI();和StringBufferHttpServletRequest.getRequestURL();返回的内容有何不同?为什么会如此?

    从HttpServletRequest的javadoc中可以看出,getRequestURI返回一个String,“the part of this request’s URL from theprotocol name up to the query string in the first line of the HTTP request”,比如“POST/some/path.html?a=b HTTP/1.1”,则返回的值为”/some/path.html”。现在可以明白为什么是getRequestURI而不是getRequestURL了,因为此处返回的是相对的路径。而getRequestURL返回一个StringBuffer,“The returned URL contains a protocol, server name, port number, andserver path, but it does not include query string parameters.”,完整的请求资源路径,不包括querystring。

    3) URL示例

    文件的URL:用URL表示文件时,服务器方式用file表示,后面要有主机IP地址、文件的存取路径(即目录)和文件名等信息。有时可以省略目录和文件名,但“/”符号不能省略。

    例(3.1):file://ftp.linkwan.com/pub/files/foobar.txt

     

    代表存放主机ftp.linkwan.com上的pub/files/目录下的一个文件,文件名是foobar.txt。

     

    例(3.2):file://ftp.linkwan.com/pub

     

    代表主机ftp.linkwan.com上的目录/pub。

     

    例(3.3):file://ftp.linkwan.com/

     

    代表主机ftp.linkwan.com上的根目录。

     

    例(3.4):http://homepage.yesky.com/175/2603675.shtml

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

    其计算机域名为homepage.yesky.com。超级文本文件(文件类型为.shtml)是在目录/175下的2603675.shtml。这是天极网的一台计算机。

    4) 统一资源定位器(URL)指的是Internet文件在网上的地址。好比一个街道在城市地理上地址。URL使用数字和字母按一定顺序排列以确定一个地址。比如,要是有一个人的地址是:

    510665 广州市天河科韵路18号 梁大头

    你会想到,梁大头是一个人名,他住在广州市天河科韵路18号,邮政编码是510665。


    3:总结

    参考了的网站:

    http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html

    http://blog.csdn.net/niuox/article/details/7312843

    http://cs.szpt.edu.cn/android/reference/java/net/URI.html (官方)

    http://cs.szpt.edu.cn/android/reference/java/net/URL.html (官方)

    http://www.cnblogs.com/devinzhang/archive/2012/01/08/2316443.html

    展开全文
  • URI的详细解析

    千次阅读 2009-03-11 11:28:00
    1.什么是URI Web上可用的每种资源 - HTML文档、图像、视频片段、... URI一般由三部分组成: 访问资源的命名机制。 存放资源的主机名。 资源自身的名称,由路径表示。 考虑下面的URI,它表示了当前的HTML 4.0规

      1.什么是URI

      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的另一个例子,指向一个用户的邮箱:

      mailto:joe@someplace.com">Joe Cool

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

      片段标志符

      有的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:

      Suppliers

      它扩展成完全的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元素)。

      2.什么是URL:

      URL是Uniform Resource Location的缩写,译为“统一资源定位符”。通俗地说,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,提供超级文本信息服务的资源。

      例一:http://www.peopledaily.com.cn/channel/welcome.htm

      其计算机域名为www.peopledaily.com.cn。超级文本文件(文件类型为.html)是在目录/channel下的welcome.htm。这是中国人民日报的一台计算机。

      例二:http://www.rol.cn.net/talk/talk1.htm

      其其计算机域名为www.rol.cn.net。超级文本文件(文件类型为.html)是在目录/talk下的talk1.htm。这是瑞得聊天室的地址,可由此进入瑞得聊天室的第1室。

      URI、URL和URN之间的区别与联系

      URI:Uniform Resource Identifier,统一资源标识符;

      URL:Uniform Resource Locator,统一资源定位符;

      URN:Uniform Resource Name,统一资源名称。

      其中,URL,URN是URI的子集。

      Web上地址的基本形式是URI,它代表统一资源标识符。有两种形式:

      URL:目前URI的最普遍形式就是无处不在的URL或统一资源定位器。

      URN:URL的一种更新形式,统一资源名称(URN, Uniform Resource Name)不依赖于位置,并且有可能减少失效连接的个数。但是其流行还需假以时日,因为它需要更精密软件的支持。

      URI是以某种统一的(标准化的)方式标识资源的简单字符串。

      URI一般由三部分组成:

      1. 访问资源的命名机制。

      2. 存放资源的主机名。

      3. 资源自身的名称,由路径表示。

      典型情况下,这种字符串以scheme(命名URI的名字空间的标识符——一组相关的名称)开头,语法如下:

      [scheme:] scheme-specific-part

      URI以scheme和冒号开头。Scheme用大写/小写字母开头,后面为空或者跟着更多的大写/小写字母、数字、加号、减号和点号。冒号把scheme与scheme-specific-part分开了,并且scheme-specific-part的语法和语义(意思)由URI的名字空间决定。如下面的例子:

      http://www.cnn.com,其中http是scheme,//www.cnn.com是 scheme-specific-part,并且它的scheme与scheme-specific-part被冒号分开了。

      URI有绝对和相对之分,绝对的URI指以scheme(后面跟着冒号)开头的URI。前面提到的http://www.cnn.com就是绝对的URI的一个例子,其它的例子还有mailto:jeff@javajeff.com、news:comp.lang.java.help和xyz://whatever。你可以把绝对的URI看作是以某种方式引用某种资源,而这种方式对标识符出现的环境没有依赖。如果使用文件系统作类比,绝对的URI类似于从根目录开始的某个文件的径。

      与绝对的URI不同的,相对的URI不是以scheme(后面跟着冒号)开始的URI。 它的一个例子是articles/articles.html。你可以把相对的URI看作是以某种方式引用某种资源,而这种方式依赖于标识符出现的环境。如果用文件系统作类比,相对的URI类似于从当前目录开始的文件路径。

      URL是Uniform Resource Location的缩写,译为"统一资源定位符"。通俗地说,URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。

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

      第一部分是协议(或称为服务方式);

      第二部分是存有该资源的主机IP地址(有时也包括端口号);

      第三部分是主机资源的具体地址。,如目录和文件名等。

      第一部分和第二部分之间用"://"符号隔开,第二部分和第三部分用"/"符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。

      目前最大的缺点是当信息资源的存放地点发生变化时,必须对URL作相应的改变。因此人们正在研究新的信息资源表示方法,例如:URI(Universal Resource Identifier)即"通用资源标识"(参见RFC 1630)、URN(Uniform Resource Name)即"统一资源名"和URC(Uniform Resource Citation)即"统一资源引用符"等。

      URI目前还处在进一步的研究当中。研究的方向就是弥补URL目前存在的缺点。

    展开全文
  • URI和URL的区别比较与理解

    万次阅读 多人点赞 2020-06-11 15:55:53
    一、URI <1>什么是URI URI,通一资源标志符(Uniform Resource Identifier, URI),表示的是web上每一种可用的资源,如 HTML文档、图像、视频片段、程序等都由一个URI进行定位的。 <2>URI的结构组成 ...

    一、URI

    <1>什么是URI

    URI,通一资源标志符(Uniform Resource Identifier, URI),表示的是web上每一种可用的资源,如 HTML文档、图像、视频片段、程序等都由一个URI进行标识的。

    <2>URI的结构组成

    URI通常由三部分组成:

    ①资源的命名机制;

    ②存放资源的主机名;

    ③资源自身的名称。

    (注意:这只是一般URI资源的命名方式,只要是可以唯一标识资源的都被称为URI,上面三条合在一起是URI的充分不必要条件)

    <3>URI举例

    如:https://blog.csdn.net/qq_32595453/article/details/79516787

    我们可以这样解释它:

    ①这是一个可以通过https协议访问的资源,

    ②位于主机 blog.csdn.net上,

    ③通过“/qq_32595453/article/details/79516787”可以对该资源进行唯一标识(注意,这个不一定是完整的路径)

    注意:以上三点只不过是对实例的解释,以上三点并不是URI的必要条件,URI只是一种概念,怎样实现无所谓,只要它唯一标识一个资源就可以了。

    二、URL

    URL是URI的一个子集。它是Uniform Resource Locator的缩写,译为“统一资源定位 符”。

    通俗地说,URL是Internet上描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。

    采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL是URI概念的一种实现方式。

    URL的一般格式为(带方括号[]的为可选项):

    protocol :// hostname[:port] / path / [;parameters][?query]#fragment

    URL的格式由三部分组成: 

    ①第一部分是协议(或称为服务方式)。

    ②第二部分是存有该资源的主机IP地址(有时也包括端口号)。

    ③第三部分是主机资源的具体地址,如目录和文件名等。

    第一部分和第二部分用“://”符号隔开,

    第二部分和第三部分用“/”符号隔开。

    第一部分和第二部分是不可缺少的,第三部分有时可以省略。 

    三、URI和URL之间的区别

    从上面的例子来看,你可能觉得URI和URL可能是相同的概念,其实并不是,URI和URL都定义了资源是什么,但URL还定义了该如何访问资源。URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI 是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。

     

    --------------------------------------------

    更新:看了一下大家的疑问,其实大家对uri可以认为只是唯一识别的编号,类似于大家的身份证号,而url就是身份证住址+姓名,这样是不是就很明显了~~

    更新2:针对大部分同学的疑问,其实纠结的就是URI到底是什么,怎么它就是URI不是URL了,其实文章中都已交代,只要能唯一标识资源的就是URI,在URI的基础上给出其资源的访问方式的就是URL,这是最简单的总结了,希望对大家有所帮助,祝好~~

    展开全文
  • 又到了每周二的分享时间了,今天分享一下在网络协议中,URI的相关内容,因为在外面出差,头图没法做,就用以前的老图咯~(偷懒也这么理直气壮) URL是什么我想大家都知道,毕竟我们每天都接触着,那URI是什么呢? 那...

    又到了每周二的分享时间了,今天分享一下在网络协议中,URI的相关内容,因为在外面出差,头图没法做,就用以前的老图咯~(偷懒也这么理直气壮)

    URL是什么我想大家都知道,毕竟我们每天都接触着,那URI是什么呢?

    那我们先来看看,如果这世界上没有URI时,会变成什么样子呢?

    没有URI的情况下,我上传了一些资料要分享给你们,你们要怎样才能下载获取呢?

    首先,我得告诉你们用FTP协议访问naonao.com,端口是8090

    然后,告诉你们登陆用户名是Naonao,密码是Handsome

    登陆成功后,你们要进入到/Naonao/Source目录下,并且转换为二进制模式

    最后再下载如何避免过帅导致的烦恼.mp4的文件

    这要不是最后的文件太吸引我,这么麻烦的步骤,我才不想去倒腾呢

    可有了URI后,上面这些步骤,我们只需要在浏览器里直接输入ftp://Naonao:Handsome@naonao.com:8090/Naonao/Source/如何避免过帅导致的烦恼.mp4
    这样就可以直接下载网络上的资源了

    友情提示一下,上面的URI并不是一个完全正确的URI,因为最后面的中文没有进行转码,关于转码解码的问题,我们稍后再看

    什么是URI?

    看完上面的内容,URI解决了什么问题,我想各位心里肯定是有数了

    不过在了解URI之前,我们需要先简单了解下URL与URN

    URL在RFC1738(1994.12)中的定义是Uniform Resource Locator,表示资源的所在位置,期望提供查找资源的方法

    而URN在RFC2141(1997.5)中的定义是Uniform Resource Name,期望为资源提供持久的,位置无关的标识方式,并允许简单的将多个命名空间映射到单个URN命名空间

    直接说URN这种概念,有些人可能不大清楚是个什么东西,我说个例子,男生肯定清楚,比如磁力链接~嘻嘻,有没有回想起什么不可言论的东西?

    我在网上找了个葫芦娃的磁力下载地址,各位围观一下,有没有觉得这东西很眼熟呢?

    magnet:?xt=urn:btih:bdab9b6759950fab3c8cbde2669bea6195491034

    好咯,不熟悉也没事,这也不是今天的重点,我们知道这玩意大概长城这样就好了。我们现在来看看,URI的定义是什么

    URI的全名呢就是Uniform Resource Identifier,主要用于区分资源,它包含了URL与URN的概念,主要是用于取代URL和URN的概念~

    换句话说,URI可以是URL/URN,但URL/URN不一定就是URI,也就是说URI是URL/URN的超集

    URI与URL的区别

    虽然我们现在知道URI是URL的超集,但在网络中,URL与URI这哥俩长的实在太像了,很多时候我们傻傻分不清URL与URI到底谁是谁

    我们先来看看定义的区别,URI与URL不同的部分就是IdentifierLocator,URI注重的是唯一标识符,而URL注重的是位置

    打个简单的比喻,如果用URI来表述我们自己,那么URI就是我们的身份证号码,URL就是我们身份证上的家庭住址,通过身份证号(URI)肯定能找到我,但是你通过我的住址(URL)那就不一定能找到我了哦

    再来说说资源包含了什么

    资源这俩字,包含的东西就太广了,既可以是图片、文档,也可以是今天的天气

    也可以是不能通过互联网访问的实体,例如人、公司

    也可以是某种抽象概念,例如亲属关系或者你是不是渣男

    但是要注意一点,URI并不是与资源一一对应的,一个资源是可以拥有很多个URI,但一个URI只会对应一个资源,就像我们手上有很多张银行卡,但每个银行卡对应的开户人,也只有我们自己一个人

    Identifier的实际用处就是将当前资源与其它资源区分开来的名称

    通过IdentifierSource的含义,我们就可以很明显的感觉到URI的一个目标,它更倾向于资源提供者把自己把所拥有的资源与其它资源区分开

    比如不能通过互联网访问的实体,比如人,我们就可以通过URL去定义Mine,Father,Relationship等,通过这种方式,我们就能将我们想表达的资源进行区分

    URI的组成

    先上张图,我们来看看URI由哪些部分组成

    我们根据图片上的内容来进行分析

    我们先来看最重要的三点,先拿个例子,看完例子再看下面的说明

    https://naonao.com?name=naonao&age=18#page-7

    Scheme

    Scheme指的就是方案,比如HTTPHTTPSFTP等,都是可以使用的,思想不要被这些常用的协议给局限了,我们还可以自定义协议,只要服务器支持即可

    Scheme可以是由字母数字+-.,都是允许的

    注意:在Scheme之后,必须使用://把Scheme与后面的部分区分开来

    Query

    query就是查询参数,是一个可选的参数,如有有的话,那么必须要以?开头

    我们最常用的形式就是使用key=value,比如上面的例子name=naonao

    但Query并不仅仅是支持这种,它是可以支持pchar,/,?等形式

    ?的话大家都知道,要使用Query查询参数,那么就必须在前面加上?,而pchar是什么呢?这点我们想了解的话,需要去参考RFC中的详细描述,这不是今天内容的重点

    fragment

    fragment也是可选的,如果有的话,必须以#开头

    比如上面的示例,page-7指向的是一个段落

    它所支持的格式跟Query所支持的格式一致

    authority

    authority包含了用户名与密码(user infomation),还有主机名(host),以及端口号(port)

    像用户名密码这东西,我们现在基本已经不使用这种方式了,因为在URI中明文传输账号密码,实在不安全

    现在还在用的,基本上也就是经常使用ftp下载资源时我们才使用

    所以我们通常只使用host:port,即主机名+端口号的形式

    主机名是不可省略的,因为一但省略,我们就找不到对应的服务器

    而端口号我们却可以省略,比如HTTP的默认端口号就是80端口,HTTPS的默认端口号就是443端口

    path

    主机名后面紧跟的就是我们的path

    在URI中,path部分必须要以/开头,所以不要把path之前的/误以为是前面authority的结尾

    path也分了很多种,分别是path-abemptypath-absolutepath-noschemepath-rootlesspath-empty

    • path-abempty
      /开头的路径或空路径
    • path-absolute
      /开头,但不能以//开头
    • path-noscheme
      以非:号开头的路径
    • path-rootless
      相对path=noscheme,增加允许以:号开头的路径
    • path-empty
      空路径

    说这么多种path只是为了尊重文档,但也别看有这么多种类型,其实使用起来是非常简单的,综合上述五种方案,我们可以发现,限制的都是开头的字符

    而我们只要不使用中文或者其它一些特殊字符作路径的开头,这样我们的路径都是合法的

    所以路径这东西,我们只要根据实际情况进行填写即可

    URI的编码

    终于到了填坑时间

    最开始我们举例说如果世上没有URI时该如何下载资源,我给出的例子URI里面带了中文,其实在URI里只能使用ASCII码

    但如果我们的URI里出现了除ASCII码以外的内容,或者是出现了URI中的用于标识的字符比如?``#``/``&等,那么就会引起URI解析错误,那这时候该怎么办呢?

    为了避免这种情况出现,URI引入了编码机制

    规则非常的简单粗暴,在ASCII码表内的特殊字符,直接就转换成ASCII码

    对于ASCII码以外的内容,就转换成十六进制的字节,然后在前面加上一个%,例如空格就被转义成%20?被转译成%3F

    像中文这种,十六进制字节值表示不全,需要UTF-8编码才能表述完整的,就是转成十六进制(UTF-8)的格式,例如闹闹就会被转义成%e9%97%b9%e9%97%b9

    因为对应的十六进制UTF-8的编码就是E9 97 B9,然后每个字节码前面加上%,就可以得到上述结果了

    平时我们在浏览器中的地址栏中输入的URI,就算是输入中文也能正常使用,其实是浏览器在背后帮我们做了转码解码的苦逼活

    这其实是一个非常友好的用户体验,不会把一些看不懂的东西直接展示给用户,也是非常值得学习的一个理念

    写在最后

    URI是网络协议学习中必须要弄明白的一个内容,但其实总的来说并不难,只是概念性的东西稍微多了点,理解了之后,其实就是一点点内容

    你可能会问,这东西学了有什么用呢?我只能回答你,学这东西没有直接用处,但是有间接用处

    比如做后台开发的,要对接接口,给的URI若不规范,那么接口调用方就无法定位到我们的资源,最后面向Google编程老半天才解决

    又或者做前端开发的,接口调用不规范,比如GET调用时query参数写错,那自然也调不通后台给的接口

    又比如拿到一个不熟悉的项目,通过浏览器的Network就可以分析到用了哪些资源,依赖了什么页面和接口,但连URI都看不懂,那就只能问同事了,问完后还要被人一顿嫌弃

    虽然遇到的这些问题都能面向Google编程或者问同事解决,但是在查资料或者咨询的同时,浪费的是我们的时间以及同事的时间

    展开全文
  • Uri详解之——Uri结构与代码提取

    万次阅读 多人点赞 2019-09-11 11:39:14
    相关博客:1、《Uri详解之——Uri结构与代码提取》2、《Uri详解之二——通过自定义Uri外部启动APP与Notification启动》 上几篇给大家讲了ContentProvider,里面有用到Uri,可能很多同学对Uri是什么,怎么来的,...
  • Uri与UriMatcher

    千次阅读 2018-07-15 17:41:31
    一.URI简介 概念:统一资源标识符(Uniform Resource Identifier) 组成部分: 1.访问资源的命名机制(scheme) 2.存放资源的主机名(authority) 3.资源自身的名称,由路径表示(path) 格式:scheme:// ...
  • Uniform Resource Identifier or URI is a string of characters that identify specific resources. URI is like an address or Social security number of an entity which can be a web page or a file or a book...
  • URL和URI的区别

    万次阅读 多人点赞 2018-03-21 12:22:49
    URI包括URL和URN两个类别,URL是URI的子集,所以URL一定是URI,而URI不一定是URL URI = Universal Resource Identifier 统一资源标志符,用来标识抽象或物理资源的一个紧凑字符串。 URL = Universal Resource ...
  • 常用的一些URI

    2015-10-13 10:58:37
    关于联系人的一些URI: 管理联系人的Uri: ContactsContract.Contacts.CONTENT_URI 管理联系人的电话的Uri: ContactsContact.CommonDataKinds.Phone.CONTENT_URI 管理联系人的Email的Uri: ContactsContact...
  • URL与URI

    千次阅读 2019-05-18 09:04:18
    URL与URI 而URL是uniform resource locator,统一资源定位器 URI,是uniform resource identifier,统一资源标识符 1、URI是以一种抽象的,高层次概念定义统一资源标识,而URL则是具体的资源标识的方式。URL是一种...
  • uri,file,path互相转化

    万次阅读 2016-10-11 11:14:10
    uri转file: file = new File(new URI(uri.toString())); uri转path: private String getPath(Uri uri) { String[] projection = {MediaStore.Video.Media.DATA}; Cursor cursor = managedQuer
  • Android之uri、file、path相互转化

    万次阅读 2019-07-05 10:35:50
    1、uri转file:file = new File(new URI(uri.toString())); file转uri:URI uri = file.toURI(); 2、uri转path:private String getPath(Uri uri) { String[] projection = {MediaStore.Video.Media.DATA};
  • 如何将String转为Uri,Uri转为Drawable

    万次阅读 2016-06-04 15:36:19
    String转Uri Uri uri=Uri.parse(s); Uri转Drawable Drawable d=Drawable.createFromStream(getContentResolver().openInputStream(uri,null));
  • string地址和uri地址互相转换

    千次阅读 2018-07-25 16:07:20
    String push=localhost:8080/test/abc; URI uri =URI.create(push); String str=uri.toString();  
  • URI Is Not Registered

    万次阅读 多人点赞 2016-02-27 22:15:14
    URI Is Not Registered使用IntelliJ Maven生成archetype时候,偶然会出现xml文件的头定义提示错误 URI is not registered
  • Android中 String 和 Uri类型的转换

    万次阅读 2013-06-19 15:02:08
    1,String ----> Uri Uri uri = Uri.parse((String) str); 例如: str = “content://*******” str = "file://**********" str = "http://*************" str = "ftp://***********" 2,Uri -----> ...
  • URI转变成file

    万次阅读 2012-02-14 09:01:10
    try {  Intent intent = getIntent();...Uri uri = intent.getData(); // 比如此时的uri为 file:///mnt/sdcard/external_sd/test.txt File file = new File(new URI(uri.toString())); Log.i(TAG, file.getAb
  • 一个android文件的Uri地址一般如下: content://media/external/images/media/62026 这是一张图片的Uri,那么我们如何根据这个Uri获得其在文件系统中的路径呢? 其实很简单,直接上代码: /** * Try to ...
  • url加密传参有时候会出现Uncaught URIError: URI malformed的错误,这是因为你的url中包含了“%”字符,浏览器在对“%”执行decodeURIComponent时报错,正确的解决是将%全部替换为%25再进行传输: urlStr.replace(/...
  • Android中Uri 和Path之间的相互转化

    万次阅读 2018-04-21 15:21:27
    Android Uri to Path现在遇到的常规Uri有两种:媒体文件的Uri是content://, 表示这是一个数据库数据。去数据库查询正常返回。其他的文件Uri是file://, 表示这个是一个文件。这个uri是通过Uri.fromFile(File file)方法...
1 2 3 4 5 ... 20
收藏数 594,978
精华内容 237,991
关键字:

uri