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和其最佳实践的指导。例如,内容可能因用于访问资源的设备的支持性和设定不同,而语言或大小上有所调整已适应这种差异。
收起全文
精华内容
下载资源
问答
  • URI和URL的区别比较与理解

    万次阅读 多人点赞 2018-06-04 10:12:03
    一、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

    千次阅读 2016-06-12 19:04:07
    uri libevent evhttp_uri_parse_with_flags parse

    uri

    uri

    struct evhttp_uri {
        unsigned flags;
        char *scheme; /* scheme; e.g http, ftp etc */
        char *userinfo; /* userinfo (typically username:pass), or NULL */
        char *host; /* hostname, IP address, or NULL */
        int port; /* port, or zero */
        char *path; /* path, or "". */
        char *query; /* query, or NULL */
        char *fragment; /* fragment or NULL */
    };

    libevent evhttp_uri_parse_with_flags

    struct evhttp_uri *
    evhttp_uri_parse_with_flags(const char *source_uri, unsigned flags)
    {
        char *readbuf = NULL, *readp = NULL, *token = NULL, *query = NULL;
        char *path = NULL, *fragment = NULL;
        int got_authority = 0;
    
        struct evhttp_uri *uri = mm_calloc(1, sizeof(struct evhttp_uri));
        if (uri == NULL) {
            event_warn("%s: calloc", __func__);
            goto err;
        }
        uri->port = -1;
        uri->flags = flags;
    
        readbuf = mm_strdup(source_uri);
        if (readbuf == NULL) {
            event_warn("%s: strdup", __func__);
            goto err;
        }
    
        readp = readbuf;
        token = NULL;
    
        /* We try to follow RFC3986 here as much as we can, and match
           the productions
    
              URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
    
              relative-ref  = relative-part [ "?" query ] [ "#" fragment ]
         */
    
        /* 1. scheme: */
        token = strchr(readp, ':');
        if (token && scheme_ok(readp,token)) {
            *token = '\0';
            uri->scheme = mm_strdup(readp);
            if (uri->scheme == NULL) {
                event_warn("%s: strdup", __func__);
                goto err;
            }
            readp = token+1; /* eat : */
        }
    
        /* 2. Optionally, "//" then an 'authority' part. */
        if (readp[0]=='/' && readp[1] == '/') {
            char *authority;
            readp += 2;
            authority = readp;
            path = end_of_authority(readp);
            if (parse_authority(uri, authority, path) < 0)
                goto err;
            readp = path;
            got_authority = 1;
        }
    
        /* 3. Query: path-abempty, path-absolute, path-rootless, or path-empty
         */
        path = readp;
        readp = end_of_path(path, PART_PATH, flags);
    
        /* Query */
        if (*readp == '?') {
            *readp = '\0';
            ++readp;
            query = readp;
            readp = end_of_path(readp, PART_QUERY, flags);
        }
        /* fragment */
        if (*readp == '#') {
            *readp = '\0';
            ++readp;
            fragment = readp;
            readp = end_of_path(readp, PART_FRAGMENT, flags);
        }
        if (*readp != '\0') {
            goto err;
        }
    
        /* These next two cases may be unreachable; I'm leaving them
         * in to be defensive. */
        /* If you didn't get an authority, the path can't begin with "//" */
        if (!got_authority && path[0]=='/' && path[1]=='/')
            goto err;
        /* If you did get an authority, the path must begin with "/" or be
         * empty. */
        if (got_authority && path[0] != '/' && path[0] != '\0')
            goto err;
        /* (End of maybe-unreachable cases) */
    
        /* If there was no scheme, the first part of the path (if any) must
         * have no colon in it. */
        if (! uri->scheme && !path_matches_noscheme(path))
            goto err;
    
        EVUTIL_ASSERT(path);
        uri->path = mm_strdup(path);
        if (uri->path == NULL) {
            event_warn("%s: strdup", __func__);
            goto err;
        }
    
        if (query) {
            uri->query = mm_strdup(query);
            if (uri->query == NULL) {
                event_warn("%s: strdup", __func__);
                goto err;
            }
        }
        if (fragment) {
            uri->fragment = mm_strdup(fragment);
            if (uri->fragment == NULL) {
                event_warn("%s: strdup", __func__);
                goto err;
            }
        }
    
        mm_free(readbuf);
    
        return uri;
    err:
        if (uri)
            evhttp_uri_free(uri);
        if (readbuf)
            mm_free(readbuf);
        return NULL;
    }
    展开全文
  • uri

    千次阅读 2013-08-04 17:39:07
    - 由一个通用资源标识符(Uniform Resource Identifier, 简称"URI")进行定位。 URI一般由三部分组成: 一、主机名。 存放资源的自身的名称,由路径表示。 参考下面的URI,它符合当前的RFC4395规范:协议名称://域名...
    组成

    Web上可用的每种资源 -HTML文档、图像、视频片段、程序等 - 由一个通用资源标识符(Uniform Resource Identifier, 简称"URI")进行定位。
    URI一般由三部分组成:

    一、主机名。
    存放资源的自身的名称,由路径表示。
    参考下面的URI,它符合当前的RFC4395规范:协议名称://域名.根域名/目录/文件名.后缀
    例如http://b.c/d/e.f (假设b.c是一个可用的域名,e.f是一个标准的文件)
    这个URI是这样的:这是一个可通过HTTP协议访问的资源,位于主机b.c上,通过URI中的字符串“/d”访问主机上的“d”文件夹,通过“e.f”请求访问主机上“/d/e.f”这个文件。
    这是URI的另一个例子,指向一个用户的邮箱:mailto:名称@域名
    注:大多数读者可能熟悉"URL",而不是URI。URL是URI命名机制的一个子集。
    二、标志符
    有的URI指向一个资源的内部。 这种URI以"#"结束,并跟着一个anchor标志符(称为片段标志符)。例如,下面是一个指向section_2的URI:
    协议://域名/目录/文件#片段标示符(例如:/a/b.php#a)
    三、相对URI
    相对URI不包含任何命名规范信息。它的路径通常指同一台机器上的资源。相对URI可能含有相对路径(如,“..”表示上一层路径),还可能包含片段标志符。
    为了说明相对URI,假设我们有一个基本的URI:
    协议://域名/目录a/目录b/文件c
    下面的链接中使用了相对URI:
    ../文件D
    它扩展成完全的URI就是 "协议://域名/目录a/文件D",
    下面是一个图像的相对URI:
    <IMG src="../icons/logo.gif" alt="logo">
    它扩展成完全的URI就是 "协议://域名/目录a/icons/logo.gif"。
    在HTML中,URI被用来:
    链接到另一个文档或资源(参看A和LINK元素)。
    链接到一个外部样式表或脚本(参看LINK和SCRIPT元素)。
    在页内包含图像、对象或applet(参看IMAGE、OBJECT、APPLET和INPUT元素)。
    建立图像映射(参看MAP和AREA元素)。
    提交一个表单(参看FORM)。
    建立一个框架文档(参看FRAME和IFRAME元素)。
    引用一个外部参考(参看Q、BLOCKQUOTE,INS和DEL元素)。
    指向一个描述文档的metadata(参看HEAD元素)。
    编辑本段
    使用


    URL是Uniform Resource Locator的缩写,译为“统一资源定位符”。
    ◇ URL的格式
    URL的格式由下列三部分组成:
    第一部分是协议(或称为服务方式);
    第二部分是存有该资源的主机IP地址(有时也包括端口号);
    第三部分是主机资源的具体地址。,如目录和文件名等。
    第一部分和第二部分之间用“://”符号隔开,第二部分和第三部分用“/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。
    ◇ URL示例
    文件的URL:
    用URL表示文件时,服务器方式用file表示,后面要有主机IP地址、文件的存取路径(即目录)和文件名等信息。有时可以省略目录和文件名,但“/”符号不能省略。
    例:file://a:1234/b/c/d.txt
    代表获取资源使用ftp协议,资源目标是a主机的1234端口的b目录下的c目录下的d.txt。
    HTTP的 URL已经在URI的组成中做过示范,在此不再陈述。
    编辑本段
    区别


    URI、URL和URN
    URI:Universal 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是以某种统一的(标准化的)方式标识资源的简单字符串。
    典型情况下,这种字符串以scheme(命名URI的名字空间的标识符——一组相关的名称)开头,语法如下:
    [scheme:] scheme-specific-part
    URI以scheme和冒号开头。Scheme用大写/小写字母开头,后面为空或者跟着更多的大写/小写字母、数字、加号、减号和点号。冒号把scheme与scheme-specific-part分开了,并且scheme-specific-part的语法和语义(意思)由URI的名字空间决定。如下面的例子:
    http://域名,其中http是scheme,//域名 是scheme-specific-part,并且它的scheme与scheme-specific-part被冒号分开了。
    URI有绝对和相对之分,绝对的URI指以scheme(后面跟着冒号)开头的URI。前面提到的http://域名 就是绝对的URI的一个例子,其它的例子还有mailto:xxx@xxx.xx、news:地址和xyz://whatever。你可以把绝对的URI看作是以某种方式引用某种资源,而这种方式对标识符出现的环境没有依赖。如果使用文件系统作类比,绝对的URI类似于从根目录开始的某个文件的径。
    与绝对的URI不同的,相对的URI不是以scheme(后面跟着冒号)开始的URI。 它的一个例子是articles/articles.html。你可以把相对的URI看作是以某种方式引用某种资源,而这种方式依赖于标识符出现的环境。如果用文件系统作类比,相对的URI类似于从当前目录开始的文件路径。
    URL是Uniform Resource Location的缩写,译为"统一资源定位符"。通俗地说,URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
    目前最大的缺点是当信息资源的存放地点发生变化时,必须对URL作相应的改变。因此人们正在研究新的信息资源表示方法,例如:URI(Universal Resource Identifier)即"通用资源标识"(参见RFC 1630)、URN(Uniform Resource Name)即"统一资源名"和URC(Uniform Resource Citation)即"统一资源引用符"等。
    URI还在进一步的研究当中。研究的方向就是弥补URL的缺点。
    编辑本段
    与URN


    URI可被视为定位符(URL),名称(URN)或两者兼备。统一资源名(URN)如同一个人的名称,而统一资源定位符(URL)代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。
    用于标识唯一书目的ISBN系统是一个典型的URN使用范例。例如,ISBN 0486275574(urn:isbn:0-486-27557-4)无二义性地标识出莎士比亚的戏剧《罗密欧与朱丽叶》的某一特定版本。为获得该资源并阅读该书,人们需要它的位置,也就是一个URL地址。在类Unix操作系统中,一个典型的URL地址可能是一个文件目录,例如file:///home/username/RomeoAndJuliet.pdf。该URL标识出存储于本地硬盘中的电子书文件。因此,URL和URN有着互补的作用。
    技术观点
    URL是标识一个互联网资源,并指定对其进行操作或取得该资源的方法的URI。可能通过对主要访问手段的描述,也可能通过网络“位置”进行标识。例如一个URL,标识一个特定资源(首页)并表示该资源的某种形式(例如以编码字符表示的,首页的HTML代码)是可以通过URL指定的网络主机获得的。URN是基于某命名空间通过名称指定资源的URI。人们可以通过URN来指出某个资源,而无需指出其位置和获得方式。资源无需是基于互联网的。例如,URN urn:isbn:0-395-36341-1 指定标识系统(即国际标准书号ISBN)和某资源在该系统中的唯一表示的URI。它可以允许人们在不指出其位置和获得方式的情况下谈论这本书。
    技术刊物,特别是IETF和W3C发布的标准中,基本不再使用“URL”这一术语,因为很少需要区别URL和URI。但是,在非技术文献和万维网软件中,URL这一术语仍被广泛使用。此外,术语“网址”在非技术文献中时常作为URL或URI的同义词出现,虽然往往其指代的只是“http”和“https”协议。
    RFC 3305
    关于URI的讨论多源于题目为《W3C/IETF URI规划联合小组报告:统一标识资源符(URI),URL和统一资源名(URN):阐明与建议》的RFC3305文件。这一RFC文件描述了一个,以统一W3C和IETF内部对于各种“UR*”术语之间关系的不同看法为目的而设立的,W3C/IETF联合工作小组的工作。虽然未作为标准被这两个组织所发布,但该文件确立了上述种种共识,并就此催生了许多标准的诞生。
    编辑本段
    相关介绍


    发展
    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和其最佳实践的指导。例如,内容可能因用于访问资源的设备的支持性和设定不同,而语言或大小上有所调整已适应这种差异。
    与XML命名空间
    XML拥有一个叫命名空间的,一个可包含元素集和属性名称的抽象域的概念。命名空间的名称(一个必须遵守通用URI文法的字符串)用于标识一个XML命名空间。但是,命名空间的名称一般不被认为是一个URI,因为URI规范定义了字符串的“URI性”是根据其目的而不是其词法组成决定的。一个命名空间名称同时也并不一定暗示任何URI协议的语义;例如,一个以”http:”开头的命名空间名称很可能与HTTP协议没有任何关系。XML专家们就这一问题在XML开发电子邮件列表上进行了深入的辩论;一部分人认为命名空间名称可以是URI,由于包含一个具体命名空间的名称集可以被看作是一个被标识的资源,也由于“XML中的命名空间”规范的一个版本指出过命名空间名称“是”一个URI引用。但是,集体共识似乎指出一个命名空间名称只是一个凑巧看起来像URI的字符串,仅此而已。
    早先,命名空间名称是可以匹配任何非空URI引用的语法的,但后来的一个对于“XML命名空间建议”的订正废弃了相对URI引用的使用。一个独立的、针对XML 1.1的命名空间的规范允许使用IRI引用作为命名空间名称的基准,而不仅是URI引用。
    为了消除XML新人中产生的对于URI(尤其是HTTP URL)的使用的困惑,一个被称为RDDL(资源目录描述语言)的描述语言被建立了,虽然RDDL的规范并没有正式地位,也并没有获得任何相关组织(例如W3C)的检查和支持。一个RDDL文档可以提供关于一个特定命名空间和使用它的XML文档的,机器与人类都能读懂的信息。XML文档的作者鼓励使用RDDL文档,这样一旦文档中的命名空间名称被索引,(系统)就会取得一个RDDL文档。这样,许多开发者对于让命名空间名称指向网络可达资源的需求就能得到满足。
    展开全文
  • Uri详解之——Uri结构与代码提取

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

    前言:依然没有前言……


    相关博客:
    1、《Uri详解之——Uri结构与代码提取》
    2、《Uri详解之二——通过自定义Uri外部启动APP与Notification启动》

     

    上几篇给大家讲了ContentProvider,里面有用到Uri,可能很多同学对Uri是什么,怎么来的,这些都不是很熟悉,今天就给大家具体讲讲Uri

    一、URI与Uri

    大家可能经常会看到在开发时,怎么有的时候是URI,有的时候是Uri,这是怎么回事?

    名称如此相像的两个类是有什么区别和联系?

     

    • 1.所属的包不同。URI位置在java.net.URI,显然是Java提供的一个类。而Uri位置在android.net.Uri,是由Android提供的一个类。所以初步可以判断,Uri是URI的“扩展”以适应Android系统的需要。
    • 2.作用的不同。URI类代表了一个URI(这个URI不是类,而是其本来的意义:通用资源标志符——Uniform Resource Identifier)实例。Uri类是一个不可改变的URI引用,包括一个URI和一些碎片,URI跟在“#”后面。建立并且转换URI引用。而且Uri类对无效的行为不敏感,对于无效的输入没有定义相应的行为,如果没有另外制定,它将返回垃圾而不是抛出一个异常。

     

    看不懂?没关系,知道这个就可以了:Uri是Android开发的,扩展了JAVA中URI的一些功能来特定的适用于Android开发,所以大家在开发时,只使用Android 提供的Uri即可;

    二、Uri结构

    (1)、基本形式:

     

    [scheme:]scheme-specific-part[#fragment]

    这里分为三部分:
    scheme、scheme-specific-part、fragment

    (2)、进一步划分:

     

    如果进一步划分的话是这样子的

     

    [scheme:][//authority][path][?query][#fragment]

    其中有下面几个规则:

    • path可以有多个,每个用/连接,比如
      scheme://authority/path1/path2/path3?query#fragment
    • query参数可以带有对应的值,也可以不带,如果带对应的值用=表示,如:
      scheme://authority/path1/path2/path3?id = 1#fragment,这里有一个参数id,它的值是1
    • query参数可以有多个,每个用&连接
      scheme://authority/path1/path2/path3?id = 1&name = mingming&old#fragment
      这里有三个参数:
      参数1:id,其值是:1
      参数2:name,其值是:mingming
      参数3:old,没有对它赋值,所以它的值是null
    • 在android中,除了scheme、authority是必须要有的,其它的几个path、query、fragment,它们每一个可以选择性的要或不要,但顺序不能变,比如:
      其中"path"可不要:scheme://authority?query#fragment
      其中"path"和"query"可都不要:scheme://authority#fragment
      其中"query"和"fragment"可都不要:scheme://authority/path
      "path","query","fragment"都不要:scheme://authority
      等等……

     

    (3)、终极划分

    其中authority,又可以分为host:port的形式,即再次划分后是这样的:

     

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

    所以这是划分最细的形式,其中host:port用冒号分隔,冒号前的是host,冒号后的port;

    三、示例

     

    经过上面的讲解,想必大家的Uri的结构就有所了解了,下面我们就实例看看各部分的识别方式。

     

    [scheme:]scheme-specific-part[#fragment]
    [scheme:][//authority][path][?query][#fragment]
    [scheme:][//host:port][path][?query][#fragment]

    先列出这三种Uri形式,好让大家对比;
    针对下面一个Uri字符串来匹配一下各个部分:

    http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic
    • scheme:匹对上面的两个Uri标准形式,很容易看出在:前的部分是scheme,所以这个Uri字符串的sheme是:http
    • scheme-specific-part:很容易看出scheme-specific-part是包含在scheme和fragment之间的部分,也就是包括第二部分的[//authority][path][?query]这几个小部分,所在这个Uri字符串的scheme-specific-part是://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4 ,注意要带上//,因为除了[scheme:]和[#fragment]部分全部都是scheme-specific-part,当然包括最前面的//;
    • fragment:这个是更容易看出的,因为在最后用#分隔的部分就是fragment,所以这个Uri的fragment是:harvic
      下面就是对scheme-specific-part进行拆分了;
      在scheme-specific-part中,最前端的部分就是authority,?后面的部分是query,中间的部分就是path
    • authority:很容易看出scheme-specific-part最新端的部分是:www.java2s.com:8080
    • query:在scheme-specific-part中,?后的部分为:stove=10&path=32&id=4
    • path:在**query:**在scheme-specific-part中,除了authority和query其余都是path的部分:/yourpath/fileName.htm
      又由于authority又一步可以划分为host:port形式,其中host:port用冒号分隔,冒号前的是host,冒号后的是port,所以:
    • host:www.java2s.com
    • port:8080

    四、代码提取

     

    上面我们通过实例讲解了肉眼识别Uri更部分的方式,但在代码中又要怎样提取呢。下面就看看Uri中提取各部分的接口,依然以上面的Uri字符串为例:

     

    http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic
    • getScheme() :获取Uri中的scheme字符串部分,在这里即,http
    • getSchemeSpecificPart():获取Uri中的scheme-specific-part:部分,这里是://www.java2s.com:8080/yourpath/fileName.htm?
    • getFragment():获取Uri中的Fragment部分,即harvic
    • getAuthority():获取Uri中Authority部分,即www.java2s.com:8080
    • getPath():获取Uri中path部分,即/yourpath/fileName.htm
    • getQuery():获取Uri中的query部分,即stove=10&path=32&id=4
    • getHost():获取Authority中的Host字符串,即www.java2s.com
    • getPost():获取Authority中的Port字符串,即8080

    另外还有两个常用的:getPathSegments()、getQueryParameter(String key)

     

     

    • List< String> getPathSegments():上面我们的getPath()是把path部分整个获取下来:/yourpath/fileName.htm,getPathSegments()的作用就是依次提取出Path的各个部分的字符串,以字符串数组的形式输出。以上面的Uri为例:

     

     

    String mUriStr = "http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic";
    Uri mUri = Uri.parse(mUriStr);
    List<String> pathSegList = mUri.getPathSegments();
    for (String pathItem:pathSegList){
        Log.d("qijian","pathSegItem:"+pathItem);
    }

    打出来的列表为:

     

     

    • getQueryParameter(String key):在上面我们通过getQuery()获取整个query字段:stove=10&path=32&id=4,getQueryParameter(String key)作用就是通过传进去path中某个Key的字符串,返回他对应的值。

     

     

    String mUriStr = "http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id#harvic";
    mUri = Uri.parse(mUriStr);
    Log.d(tag,"getQueryParameter(\"stove\"):"+mUri.getQueryParameter("stove"));
    Log.d(tag,"getQueryParameter(\"id\"):"+mUri.getQueryParameter("id"));

    注意注意,我稍微更改了下字符串,把query中id的值去掉了!!!!!然后看看通过getQueryParameter("id")获取它的值会得到什么!
    结果如下:

     

    可以看到,在path中,即使针对某一个KEY不对它赋值是允许的,但在利用getQueryParameter()获取该KEY对应的值时,获取到的是null;

    五、扩展

    1、 绝对URI和相对URI

    绝对URI:以scheme组件起始的完整格式,如http://fsjohnhuang.cnblogs.com。表示以对标识出现的环境无依赖的方式引用资源。
    相对URI:不以scheme组件起始的非完整格式,如fsjohnhuang.cnblogs.com。表示以对依赖标识出现的环境有依赖的方式引用资源。

     

    2、不透明URI和分层URI

    不透明URI:scheme-specific-part组件不是以正斜杠(/)起始的,如mailto:fsjohnhuang@xxx.com。由于不透明URI无需进行分解操作,因此不会对scheme-specific-part组件进行有效性验证。
    分层URI:scheme-specific-part组件是以正斜杠(/)起始的,如http://fsjohnhuang.com。

     

     

     

    更多有关本扩展和标准化(Normalization)、解析化(Resolution)、相对化(Relativization)的知识参见:《Java魔法堂:URI、URL(含URL Protocol Handler)和URN》

     

    下面源码中演示了各个提取函数的用法及结果;

    如果本文有帮到你,记得关注哦

    源码下载地址:http://download.csdn.net/detail/harvic880925/8539679

    请大家尊重原创者版权,转载请标明出处:http://blog.csdn.net/harvic880925/article/details/44679239 谢谢

     

    如果你喜欢我的文章,你可能更喜欢我的公众号

    启舰杂谈

     

    展开全文
  • 求助下,在微信开放平台上我填写的回调域是:www.fwhetou.com/oauth/wechatRedirect,我构造的链接是:...访问的时候, 提示redirect_uri 参数错误,有谁遇见过么?
  • Android中的URIUri

    万次阅读 2018-04-21 15:11:17
    一、URIUri大家可能经常会看到在开发时,怎么有的时候是URI,有的时候是Uri,这是怎么回事?名称如此相像的两个类是有什么区别和联系?1.所属的包不同。URI位置在java.net.URI,显然是Java提供的一个类。而Uri位置...
  • URI malformed

    千次阅读 2020-08-24 16:59:47
    问题: 通过<Link>进行路由跳转 报错URI malformed 原因: 由于decodeURI转码时,通过%进行解析,如果字符串中存在%,则会出现URI malformed 解决:
  • android10以上 uri转file uri转真实路径

    千次阅读 2020-05-18 10:50:06
    fun uriToFile(context: Context, uri: Uri): File? = when(uri.scheme){ ContentResolver.SCHEME_FILE -> uri.toFile() ContentResolver.SCHEME_CONTENT ->{ val cursor = context.contentResolver.query...
  • URI学习

    2017-04-08 22:43:20
    URI和URL的区别 JAVA DOC URI wikipedia uri
  • 说明Android页面之间传递不提供传递Uri类型,但是去截屏页面截图,把图片返回到操作页面显示,需要把相册或者相机的Uri连接传递的。代码 返回:private Uri imageUri; .... Intent intent = new Intent(this, ...
  • Android中Uri的使用

    千次阅读 2017-07-12 14:22:19
    uri
  • DataURI

    千次阅读 2016-12-27 00:37:21
    Data URI 协议
  • URL和URI(二)URI

    千次阅读 2018-09-27 17:10:08
    URIURI是对URL的抽象,不仅包括统一资源定位符(Uniform Resource Locator,URL)还包括统一资源名(Uniform Resource Names,URN)。实际使用的URI大多是URL,正常情况下,假如你想下载一个URL的内容,应当使用...
  • Web基础-Uri跟Url的区别

    万次阅读 多人点赞 2017-05-23 16:03:14
    参考博客:关于URL跟URI的区别,个人见解 - J2EE 关于URL和URI的区别,个人见解。 初学java,最近被一个概念搞得头晕脑胀,就是url和uri的概念和区别,网上查了一大通,发现各种回答眼花缭乱,有百科直接粘贴的,有...
  • 截取uri

    2017-03-13 18:01:14
    String path = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));最后一个/到最后一个.
  • Nginx $request_uri和$uri详解

    千次阅读 2020-05-29 14:09:07
    $uri nginx中的$uri记录的是执行一系列内部重定向操作后最终传递到后端服务器的URL 包含请求的文件名和路径,不包含包含“?”或“#”等参数。 完整URL链接:http://www.alipay.com/alipay/index.html $uri:/alipay...
  • Uri详解

    2016-09-30 08:27:57
    1.Uri 通用资源标志符(Universal Resource Identifier, 简称"URI")。 Uri代表要操作的数据,Android上可用的每种资源 - 图像、视频片段等都可以用Uri来表示。 URI一般由三部分组成: 访问资源的命名机制。...
  • 前言:马上快要毕业一年了,还有三个月,要在毕业一年...相关博客:1、《Uri详解之——Uri结构与代码提取》2、《Uri详解之二——通过自定义Uri外部启动APP与Notification启动》 一、自定义Uri与外部启动 1、概述 ...
  • URI 权限

    千次阅读 2017-10-16 13:24:27
    URI 权限 到目前为止所述的是标准权限系统,内容提供程序仅仅使用此系统通常是不够的。内容提供程序可能需要通过读取和写入权限保护自己,而其直接客户端也需要将特定 URI 传给其他应用以便于它们运行。邮件...
  • URI记录

    2013-07-30 16:53:17
    URI:统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。该种标识允许用户对网络中(一般指万维网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关...
  • 在nginx中有几个关于uri的变量,包括$uri、$request_uri、$document_uri,下面看一下他们的区别 :$request_uri: /stat.php?id=1585378&amp;web_id=1585378$uri /stat.php$document_uri: /stat.php   注:遇到 ...
  • nginx常见内置变量$uri和$request_uri

    千次阅读 2019-12-31 09:30:58
    这里介绍nginx常见内置变量uriuriuri和request_uri代表的值,首先先看nginx配置: [root@CentOS7-2 conf.d]# cat default.conf server { listen 80; server_name localhost; #charset koi8-r; #...
  • 记录:URI、URL和Uri

    千次阅读 2017-03-15 11:17:04
    在使用 Android 下的 Uri,只会照网络的资料去抄着走。完全不知道具体的意思是什么。现在打算学习一下,看来一下资料第一感觉好复杂。在 java的包下,还有 URI、URL和URN。这下就跟家蒙了。摘抄了几名博主的文章,去...
  • URI编码

    千次阅读 2018-08-18 18:22:29
    一、URI编码的意义 我们都知道Http协议中参数的传输是”key=value”这种简直对形式的,如果要传多个参数就需要用“&amp;amp;amp;”符号对键值对进行分割。如”?name1=value1&amp;amp;amp;name2=value2”,...
  • URI 整理

    千次阅读 2014-09-28 21:16:55
    URI 详解 统一资源标志符(Universal Resource Identifier, 简称"URI")。  Uri代表要操作的数据,Android上可用的每种资源 - 图像、视频片段等都可以用Uri来表示。  URI一般由三部分组成:  访问...
  • uri转byte

    2020-02-18 15:13:59
    public byte[] UriToByte(Uri uri){ Bitmap bitmap1 = null; try { bitmap1 = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri); } catch (IOException e) { e.pri...
  • System.URI类 - 获取URI的各种属性

    千次阅读 2018-11-21 22:17:13
    System.Uri类用于处理Uri地址信息,常用到它的地方有,相对Uri地址转绝对Uri地址,获取Uri的某部分信息等等,可以说是一个非常有用的类。 一、属性 AbsolutePath 获取 URI 的绝对路径。 AbsoluteUri 获取绝对 URI。 ...
  • Android:content uri转 file uri

    千次阅读 2015-10-23 12:05:26
    Android:content uri转 file uri 在android开发中我们在处理一图片时,经常需要将android uri如content://media/external/image/media/102这样格式转换 成File类型或者获取真实文件路径。网上有不少示例代码,...
  • Uri的使用

    千次阅读 2019-01-22 14:42:05
    1.Uri 通用资源标志符(Universal Resource Identifier, 简称&quot;URI&quot;)。 Uri代表要操作的数据,Android上可用的每种资源 - 图像、视频片段等都可以用Uri来表示。 URI一般由三部分组成: ,URI...
  • URL和URI的区别

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

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 109,712
精华内容 43,884
关键字:

uri