`

URI、URL、URN的区别

URL 
阅读更多
首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。

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

ok,现在回答文章开头提出的问题,到底是imgUrl好呢,还是imgUri好?显然,如果说imgUri是肯定没问题的,因为即使它实际上是url,那它也是uri的一种。那么用imgUrl有没有问题呢?此时则要看它的可能取值,如果是绝对路径,能够定位的,那么用imgUrl是没问题的,而如果是相对路径,那还是不要用ImgUrl的好。总之,用imgUri是肯定没问题的,而用imgUrl则要视实际情况而定。

第二个,从HttpServletRequest的javadoc中可以看出,getRequestURI返回一个String,“the part of this request’s URL from the protocol 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, and server path, but it does not include query string parameters.”,完整的请求资源路径,不包括querystring。

总结一下:URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,所以,是绝对的,而通常说的relative URL,则是针对另一个absolute URL,本质上还是绝对的。

注:这里的绝对(absolute)是指包含scheme,而相对(relative)则不包含scheme。

URI抽象结构     [scheme:]scheme-specific-part[#fragment]

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

authority为[user-info@]host[:port]

参考资料:

http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URI.html

http://en.wikipedia.org/wiki/Uniform_Resource_Identifier

http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html

ps:

java.net.URL类不提供对标准RFC2396规定的特殊字符的转义,因此需要调用者自己对URL各组成部分进行encode。而java.net.URI则会提供转义功能。因此The recommended way  to manage the encoding and decoding of URLs is to use  java.net.URI. 可以使用URI.toURL()和URL.toURI()方法来对两个类型的对象互相转换。对于HTML FORM的url encode/decode可以使用java.net.URLEncoder和java.net.URLDecoder来完成,但是对URL对象不适用。

原文地址:http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html

URI:统一资源标识
URL:统一资源 定位
URN:统一资源名称

例如:www.baidu.com是URL 但不是URI
www.baidu.com/index.html 是URL 同时也是URI。
好像不太对啊, 因为 www.baidu.com = www.baidu.com/index.html
所以,URL 就是 URI 的 定位。

但URI 不一定是 URL。
因为 URI有一类子集是 URN,它命名资源 但 不指定 如何定位资源。
如: mailto, news等,需要 加上 相应的结构参数,才能进行 统一资源定位。
如: mailto:aykimforward@qq.com

因此,三者之间的关系是:URI 一定是 URL
URN+结构参数 = URI 就是 URL。
分享到:
评论

相关推荐

    关于URI和URN,URL和java中对应的类.docx

    URI、URL和URN之间的关系是:URI是顶层概念,包括了URL和URN。URL是URI的一种具体形式,用于提供资源的访问途径,而URN则提供了一个永久性的名字,即使资源的物理位置改变,依然可以通过URN找到资源。 在Java中,...

    关于URI和URN,URL和java中对应的类.pdf

    URI 不仅包括了 URL(Uniform Resource Locator,统一资源定位符),还包含了 URN(Uniform Resource Name,统一资源名称)。URL 是 URI 的一个子集,它提供了资源的具体位置,可以用来获取资源。URL 的结构通常包含...

    URI,URL常识

    #### 三、URI与URL之间的区别及联系 - **区别**: - **URI**是对资源的标识,不提供如何访问该资源的信息。 - **URL**是一种特殊的URI,不仅标识资源,还提供访问资源的方法。 - **URN**(Uniform Resource Name...

    URI和URL的区别

    二、URI和URL的区别及关系 简而言之,URI是标识某一个资源,而URL用位置来标识一个资源。 一、URI、URL和URN Web上地址的基本形式是URI,它有多种形式:常见的有URL和URN。 URI = Universal Resource Identifier ...

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

    其中,URL,URN是URI的子集。 Web上地址的基本形式是URI,它代表统一资源标识符。有两种形式: URL:目前URI的最普遍形式就是无处不在的URL或统一资源定位器。 URN:URL的一种更新形式,统一资源名称(URN, Uniform ...

    Uri一个URI处理库

    它可能是一个URL(统一资源定位符)或者URN(统一资源名称)。URI通常包括协议、主机名、路径、查询参数等组成部分。 2. **Uri库的结构**: Uri库主要由几个关键类组成,如`UriInterface`、`Uri`和`Parser`等。`...

    解析URI与URL之间的区别与联系

    URI(Uniform Resource Identifier)和URL(Uniform Resource Locator)是互联网上资源定位的两种重要概念。它们虽然在功能上有所重叠,但有着明确的区别。 首先,URI,统一资源标志符,是一个抽象的概念,用于唯一...

    浅析什么是URI

    在讨论URI时,常常会遇到其他类似的术语,例如URL(Uniform Resource Locator,统一资源定位符)和URN(Uniform Resource Name,统一资源名称)。这些术语之间的关系如下: - **URL**:URL是一种特殊的URI,用于...

    Java网络编程之URI、UR

    URI(统一资源标识符)和URL(统一资源定位符)是互联网资源定位的基础概念,而URN(统一资源名称)则是一种特殊的URI,用于持久命名资源。本文将深入探讨这些概念及其在Java中的实现。 首先,URI是全球唯一的资源...

    URI (Java Platform SE 8 )

    Java 8 documentation for class URI, a good reference for recapping the concepts and use cases of URI/URL/URN.

    url和uri区别

    URI(Uniform Resource Identifier)和URL(Uniform Resource Locator)是互联网上资源定位的两种重要概念,它们之间存在着密切的关系,但又有明显的区别。 URI是统一资源标识符,它是一个全局唯一的字符串,用于...

    前端项目-URI.js.zip

    在Web应用中,URI扮演着至关重要的角色,它用于定位网络资源,包括URL(Uniform Resource Locator)和URN(Uniform Resource Name)。URI.js 提供了一套完整的API,使得开发者可以轻松地解析、构建、修改和操作URI。...

    VSoft.Uri-master_SimpleUriParser_

    在IT行业中,URI(Uniform Resource Identifier)是一种标准的标识资源的方式,它包括URL(Uniform Resource Locator)和URN(Uniform Resource Name)。"VSoft.Uri-master_SimpleUriParser_"这个项目是针对URI解析...

    RFC 3986:2005 Uniform Resource Identifier (URI):Generic Syntax -

    URI是互联网上资源的唯一标识符,包括我们常见的URL(Uniform Resource Locator)和URN(Uniform Resource Name)。这份文档详细阐述了URI的构建块、语法、编码规则以及解析过程,对于理解互联网资源的定位和引用至...

    uri-schemes-1.x-源码.rar

    它包含了URL(Uniform Resource Locator)和URN(Uniform Resource Name),是互联网上的资源定位和命名的核心部分。URI schemes则是定义如何解析和访问这些资源的特定协议或方式。本文将深入探讨"uri-schemes-1.x-...

    网络游戏-使用JavaScript对在网络浏览器中的分层URI解除引用的机制.zip

    分层URI(Hierarchical Uniform Resource Identifier)是互联网上资源的唯一标识,如URL(Uniform Resource Locator)和URN(Uniform Resource Name)。本资料主要探讨了如何使用JavaScript来处理和解析这些在网络...

    sabreuri一个功能URIs操纵库

    1. URI和URL的区别:在理解sabre/uri库之前,首先需要知道URI和URL之间的区别。URI是统一资源标识符,它包括URL(统一资源定位符)和其他类型的资源标识,如URN(统一资源名称)。URL是URI的一个子集,提供了资源的...

    URI:QuestURIs URI

    URI可以被看作是URL(Uniform Resource Locator)和URN(Uniform Resource Name)的统称,它既可以提供资源的位置(如网页的URL),也可以提供资源的名字(如URN)。在“Quest URIs URI”这个主题中,我们似乎关注的...

    uri-problems

    5. URL类与URI类的区别: - 虽然URI更通用,但URL提供了额外的功能,如打开连接、读取数据等。 - `java.net.URL`类可以转换为`URI`,但不是所有URI都能转换回URL,因为某些URI可能不适合定位资源。 - `new URL...

Global site tag (gtag.js) - Google Analytics