URI、URL、URN

一、简述

调用 Web 地址是普通的一个行为。一般这种情况,大家都会说,将“URL”放到浏览器中。这里提到的 URL ,其实不是一个 URL ,是网址的意思。URI 是统一资源标识符,而 URL 是统一资源定位符。因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。

二、URI、URL、URN


URI 是以某种统一的(标准化的)方式标识资源的简单字符串。Web 上可用的每种资源如 HTML 文档、图像、视频片段、程序等都是一个来 URI 来定位的。URI 一般由三部组成:
①访问资源的命名机制
②存放资源的主机名
③资源自身的名称,由路径表示,着重强调于资源。

Web 上地址的基本形式是 URI(Uniform Resource Identifier,统一资源标识符),它代表统一资源标识符,用来唯一的标识一个资源。有两种形式:
1️⃣URL(Uniform Resource Locator,统一资源定位符):目前 URI 的最普遍形式就是无处不在的 URL 或统一资源定位器。它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。URL 是 Internet 上用来描述信息资源的字符串,主要用在各种 WWW 客户程序和服务器程序上,特别是著名的 Mosaic。采用 URL 可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL 一般由三部组成:
①协议(或称为服务方式)
②存有该资源的主机 IP 地址(有时也包括端口号)
③主机资源的具体地址。如目录和文件名等
2️⃣URN(Uniform Resource Name,统一资源名称):URL 的一种更新形式,统一资源名称。不依赖于位置,并且有可能减少失效连接的个数。但是其流行还需假以时日,因为它需要更精密软件的支持。

说明:
URI 是标识符,可以表示名称,位置或两者。所有的 URN 和 URL 都是 URI,但相反是不正确的;产生 URL 的部分是名称和访问方法的组合。在 Java 的 URI 中,一个 URI 实例可以代表绝对的,也可以是相对的,只要它符合 URI 的语法规则。而 URL 类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的。在 Java 类库中,URI 类不包含任何访问资源的方法,它唯一的作用就是解析。相反的是,URL 类可以打开一个到达资源的流。

三、GET和POST的区别

  1. GET 提交的数据会放在 URL 之后,以?分割 URL 和传输数据,参数之间以&相连,如EditPosts.html?name=wg&id=123456。POST 方法是把提交的数据放在 HTTP 包的 Body 中。
  2. GET 提交的数据大小有限制(因为浏览器对URL的长度有限制),而 POST 方法提交的数据没有限制。
  3. GET 方式需要使用Request.QueryString来获取变量的值,而 POST 方式通过Request.Form来获取变量的值。
  4. GET 方式提交数据,会带来安全问题。比如一个登录页面,通过 GET 方式提交数据时,用户名和密码将出现在 URL 上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。

四、历史

  1. URI:RFC1630,发布于 1994 年 6 月,被称为“Universal Resource Identifiers in WWW: A Unifying Syntax for the Expression of Names and Addresses of Objects on the Network as used in the World-Wide Web”
  2. URL:RFC1738,发布于 1994 年 12 月, 被称为“Uniform Resource Locators”
  3. URN:RFC1737,发布于 1994 年 12 月,被称为“Functional Requirements for Uniform Resource Names”
### URLURIURN 的区别与使用 #### 定义与概念 统一资源定位符(URL)、统一资源标识符(URI)以及统一资源名称(URN)都是用于识别网络上的资源的方式,但它们的具体定义和用途有所不同。 - **URI** 是一种广义的概念,表示任何可以用来唯一标识某个资源的方法。它是一个超集,涵盖了 URLURN[^1]。 - **URL** 是 URI 的子集,主要用于指定如何访问特定的资源。它不仅提供资源的位置信息,还包含了协议(如 `http` 或 `ftp`),主机名以及其他必要的参数来实现对资源的实际获取[^1]。 - **URN** 同样也是 URI 的一种形式,但它更侧重于命名而非定位。URN 提供了一种持久不变的方式来指代某物,而不依赖其物理位置。它的结构通常由三部分组成:“urn:”前缀后面跟着命名空间标识符(NID),再接着是该命名空间内的具体字符串(NSS)[^1]。 #### 使用场景对比 - 当开发者需要明确指出一个文件在网络中的确切地址并能够立即打开这个链接时,则会选用 URL 。例如,在 HTML 中通过 `<a>` 标签创建指向其他网页的超级链接就经常采用 HTTP 协议下的 URL 地址。 ```html <a href="https://www.example.com/page.html">Visit Example Page</a> ``` - 如果只是想表达某种抽象意义上的对象而不需要关心实际存储地点的话,那么可以选择使用 URN 来代替具体的路径描述。比如 ISBN 号码就可以作为书籍的标准 URN 表达方式之一: ```text urn:isbn:978-3-16-148410-0 ``` - 对于那些既希望保持灵活性又要求一定程度标准化的应用程序来说,可能就会综合运用到以上两种甚至更多类型的 URI 形式。例如 RESTful API 设计中经常会遇到这样的情况——某些端点可能会接受基于 ID 查询请求的同时也允许按照分类标签检索相关内容;此时便可以通过组合不同模式的 URI 实现更加丰富的交互逻辑[^2]。 #### 技术细节分析 从技术角度来看,每类 URI 都有自己的特点及适用范围: - **URL**: 包含足够的信息使得客户端可以直接连接服务器从而取得目标数据; - **URN**: 更加注重语义层面的意义传达而不是操作层面上的功能实现; - **通用规则**: 所有的 URL 均属于合法的 URI ,但是并非所有的 URI 能够充当有效的 URL [^3]. 综上所述,在 Web 开发过程中合理选择合适的 URI 类型对于构建高效稳定的服务至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JFS_Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值