URL和URI区别以及相对路径和绝对路径

时间:2021-09-10 09:52:09

URL和URI的概念一直以来都很模糊,最近刚好遇到了,借这个机会来深入了解一下,包括相对路径和绝对路径。

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

  1. 在*别上,字符串形式的 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)
  2. 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/