URL和URI的概念一直以来都很模糊,最近刚好遇到了,借这个机会来深入了解一下,包括相对路径和绝对路径。
通过这个图可以知道URI(Uniform Resource Identifier 统一资源标识符)其实包括URL(Uniform Resource Locator 统一资源定位符)和URN((Uniform Resource Name 统一资源名称,它命名资源但不指定如何定位资源),可以说URI同时具备locator 和name特性的一个东西。URN作用就好像一个人的名字,URL就像一个人的地址。换句话说:URN确定了东西的身份,URL提供了找到它的方式。
当然,现在最主要的弄清楚URI和URL的区别
首先看一下在web项目中的servlet中分别通过request.getRequestURI()和request.getRequestURL()输出的URI和URL格式如下
URI: /servlet3_exercise/login
URL: http://localhost:8080/servlet3_exercise/login
- 在*别上,字符串形式的 URI 引用(以下简写为 “URI”)语法如下
[scheme:]scheme-specific-part[#fragment]
URI 可以分为不透明URL和分层URI。-
不透明 URI 为绝对 URI,其特定于scheme的部分不是以斜线字符 ('/') 开始。不透明 URI 无法进行进一步解析。下面是不透明 URI 的一些示例:
mailto:java-net@java.sun.com
news:comp.lang.java
urn:isbn:096139210x
不透明URI是web项目中很少出现的,了解一下就行。 - 分层 URI 或者为绝对 URI(其特定于scheme的部分以斜线字符开始),或者为相对 URI,即不指定scheme的 URI。下面是分层 URI 的一些示例:
http://java.sun.com/j2se/1.3/(绝对URI)
/docs/guide/collections/designfaq.html#28(相对URI)
docs/guide/collections/designfaq.html#28(相对URI)
../../../demo/jfc/SwingSet2/src/SwingSet2.java(相对URI)
file:///~/calendar(绝对URI)
-
- scheme:scheme-specific-part[#fragment]
URL 格式如上,只能是绝对的,也就是必须以协议:开头。可能有人见过相对URL,但是,这样的URL不是严格技术意义上的URL。
最后来看看例子,来自权威的RFC:
ftp://ftp.is.co.za/rfc/rfc1808.txt (also a URL because of the protocol)
http://www.ietf.org/rfc/rfc2396.txt (also a URL because of the protocol)
ldap://[2001:db8::7]/c=GB?objectClass?one (also a URL because of the protocol)
mailto:John.Doe@example.com (also a URL because of the protocol)
news:comp.infosystems.www.servers.unix (also a URL because of the protocol)
tel:+1-816-555-1212
telnet://192.0.2.16:80/ (also a URL because of the protocol)
urn:oasis:names:specification:docbook:dtd:xml:4.1.2
这些全都是URI, 其中有些是URL,就是那些提供了访问机制。
参考: https://danielmiessler.com/study/url-uri/
http://www.cnblogs.com/hust-ghtao/p/4724885.html
http://docs.oracle.com/javase/7/docs/api/