URI和URL、URN的作用和区别

2023-11-16

前言

我们都知道URL是使用Web浏览器等访问Web页面时需要输入的网页地址。而对URI、URN的认识可能很少,更有甚者会像我一样,把URI与URL搞混,还以为是一个东西的不同别名。
在这里插入图片描述
其实URI是URL与URN的超集,URI包括URL和URN这两个子集。今天我们就来详细探究一下URI与URL、URN。

URL

URL统一资源定位系统(uniform resource locator)在百度百科上的定义是因特网的万维网服务程序上用于指定信息位置的表示方法。
它最初是由蒂姆·伯纳斯·李发明用来作为万维网的地址。现在它已经被万维网联盟编制为互联网标准RFC1738。通俗来讲就是让我们定位互联网上的各种资源。例如我们经常浏览网站看到的每一个网页或图片都具有唯一的URL,即通过URL地址可以成功的访问到,且这些URL地址都是唯一的。

RFC

这里先了解下RFC(Request for Comments,征求修正意见书),是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件。可以说RFC是互联网的设计文档,用来指定HTTP协议技术标准的文档,若不按照RFC标准执行,就有可能导致无法通信的状况。例如,有一台Web服务器内的应用服务没有遵照RFC的标准实现,那Web浏览器就很可能无法访问这台服务器了。

但也不是所有的应用程序都符合RFC,存在某些应用程序因客户端或服务器端的不同,而未遵照RFC标准,反而将自成一套的“标准”扩展的情况。

绝对URL与相对URL的区别

绝对URL:包含了指向目录或者文件的完整信息,包括模式,主机名和路径。对于FTP站点以及几乎所有的不使用HTTP协议的URL,都应该使用绝对的URL。

相对URL :只给出一个参照位置,用于指示资源相对于当前页面的位置。
例如我们一直在某一个网站(website)对应的url地址——https://baike.baidu.com/item/,此时我们想访问
https://baike.baidu.com/item/URI.html
https://baike.baidu.com/item/URL.html
利用相对定位和相对URL,我们就可以直接写成
website/URI.html
website/URL.html

URN

URN (Uniform Resource Name 统一资源名称),通过特定命名空间中的唯一名称或ID来标识资源,但不指定如何访问资源
ISBN:987-7-302-14751-0是一个URN,因为它唯一地标识某一本书,但它不是URL,因为它没有指定如何检索该书。
在这里插入图片描述

URN的历史

1997年的RFC2141于中定义了URN,期望为资源提供持久的、位置无关的标识方式,并允许简单地将多个命名空间映射到单个URN命名空间。这样一个URI的存在并不意味着被标识的资源一定是可用的,但它仍然需要保持全局唯一和持久,即使资源已经不存在了或变得不可用。
自从2005年RFC 3986发布,这一术语的使用已被限制更少的“URI”取代。这是W3C和IETF联合组成的工作组所提议的。URN和URL都已经是URI的一种,而且特定情况下URL可能同时拥有名字(URN)和位置(URL)。

在1990年,URN作为一个元数据框架,原本被期望和URL、URC(统一资源特征)一起组成一个第三方互联网信息架构。然而URC一直停留在理论阶段,随之更晚出现的其他技术(例如资源描述框架)取代了它们。

URI

URI(统一资源标识符),该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。Web上可用的每种资源 -HTML文档、图像、视频片段、程序等由一个通用资源标识符进行定位。

1998年随着RFC2396的发表,URI文法形成了独立的标准,同时RFC 1630和1738中关于URI和URL的许多部分也得到了修订和增补。新RFC修改了“URI”中“U”的含义:它开始代表统一(Uniform)而不再是通用(Universal)

URI是Uniform Resource Identifier 的缩写。RFC2396分别对这3个单词进行了如下定义:

Uniform

规定统一的格式可方便处理多种不同类型的资源,而不用根据上下文环境来识别资源指定的访问方式。另外,加入新增的协议方案(如http:或ftp:)也更容易。

Resource

资源的定义是“可标识的任何东西”。不仅是文档文件,图像或服务(例如某地天气预报)等能够区别于其他类型的,全都可作为资源。另外,资源不仅可以是单一的,也可以是多数的集合体。

Identifier

表示可标识的对象。也称为标识符。

综上所述,URI就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。采用HTTP协议时,协议方案就是http。除此之外,还有ftp、mailto、telnet、file等。标准的URI协议方案有30种左右,由隶属于国际互联网资源管理的非营利社团ICANN(互联网名称与数字地址分配机构)的IANA(互联网号码分配局)管理颁布。

URI用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置)。可见URL是URI的子集,所以URL一定是URI,而URI不一定是URL

URI格式

RFC3396URI通用语法列举的例子:
http://www.ietf.org/rfc/rfc2396.txt
ftp://ftp.is.co.za/rfc/rfc1808/txt
tel:+1-816-555-1212
telnet://192.0.2.16:80/

表示指定的URI,要使用涵盖全部必要信息的绝对URI、绝对URL以及相对URL。相对URL,是指从浏览器中基本URI处指定的URL,前面已经讨论过它们的区别,下面我们来看看绝对URI的格式。

在这里插入图片描述

使用http:或https:等协议方案名获取访问资源时要指定协议类型。不区分字母大小写,最后加一个冒号:。也可使用data:或JavaScript:这类指定数据或脚本程序的方案名。

登录信息(认证)
指定用户名和密码作为从服务器端获取资源时必要的登录信息(身份认证)。此项是可选项。

服务器地址
使用绝对URI必须指定待访问的服务器地址。地址可以是类似www.baidu.com这种DNS可解析的名称,或是192.168.1.1这类IPv4地址名,还可以是[0:0:0:0:0:0:0:1]这样用方括号括起来的IPv6地址名。

服务器端口号
指定服务器连接的网络端口号。此项为可选项,若用户省略则自动使用默认端口号。

带层次的文件路径
指定服务器上的文件路径来定位特指的资源。这与UNIX系统的文件目录结构相似。

查询字符串
针对已指定的文件路径内的资源,可以使用查询字符串传入任意参数。此项可选。

片段标识符
使用片段标识符通常可标记出已获取资源中的子资源(文档内的某个位置)。但在RFC中并没有明确规定其使用方法。该项也为可选项。

总的来说URI、URL、URN这三者的关系如图所示:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

URI和URL、URN的作用和区别 的相关文章

  • 编写跨环境传输的 URL 的安全方法

    我目前正在本地计算机上开发一些软件 为了这个问题 我们来调用一下这个软件StackOverflow 我有以下页面 C sites StackOverflow index php C sites StackOverflow content p
  • 批处理文件中的 URL 解码

    如何在批处理文件中 urldecode 以下字符串 我需要更改以下内容 http x3a x2f x2f www example com x2f some page x2f some x2f link html to this http w
  • PHP 路由 - 样式表无效

    我用 PHP 创建了一个基本的路由系统 url 被分割成一个数组 这样我就可以根据 URL 决定显示什么 例如 www domain com page option param 因此 在我的index php 中 我为页眉 内容和页脚定义了
  • SharePoint 发布 HTML 字段控件将相对 URL 转换为绝对 URL

    因此 在对是否应该在面向外部的 SharePoint 网站上使用 CEWP 还是 HTML 字段控件进行了大量研究之后 我们决定使用字段控件 非常感谢 AC 现在 我们遇到了一个问题 我读过的所有博客都说这不应该是一个问题 当我们将相对 U
  • 用作 MAMP 起始页 URL 的 index.* 文件在哪里?

    我试图了解 MAMP 如何管理 Apache Web 服务器 但我找不到index 用作 MAMP 起始页的文件 虚拟主机配置 httpd vhosts conf 不包括在内并且Applications MAMP htdocs仅包含我自己的
  • 如何创建不带 (to) 部分的 mailto: 链接

    如何正确构建没有该部分的 mailto 链接 mailto email protected cdn cgi l email protection 我不需要地址 只想通过mailto填写后面的参数 是的你可以 mailto body tisb
  • 获取完整的 url,包括哈希后的查询字符串

    如何获得完整URL包括后面的字符串参数hash tag 我试着回应 url SERVER REQUEST URI echo url 之后的字符串hash tag不会读 佩卡的评论应该是一个答案 hash标签后面的字符串参数不发送到服务器 它
  • WordPress URL 中的正斜杠

    我正在将我的网站从 Drupal 迁移到 Wordpress 在 Drupal 中 我可以轻松地给 URL 指定一个别名 这个别名可以是任何东西 即 www example com abc xyz hello html 但在 WordPre
  • ASP.NET:获取*真实*原始 URL

    在ASP NET中 有什么办法可以得到real原始网址 例如 如果用户浏览到 http example com mypage aspx 2F http example com mypage aspx 2F 我希望能够得到 http exam
  • 如何防止在以 .php 结尾的 URL 后添加其他字符串?

    我们网站的团队刚刚发现 任何用户都可以在以 php 扩展名结尾的 URL 后面添加斜杠 然后添加任何字符串 并且仍然可以访问相同的原始页面 例如 我可以通过以下方式访问 www mydomain com index php www mydo
  • 如何为codeigniter项目完美设置虚拟主机?

    我正在尝试为 codeigniter 项目制作虚拟主机 我已经在 httpd vhosts conf 中完成了此操作
  • 在JSP中获取Servlet转发的请求URL

    如何在JSP中获取Servlet转发的请求URL 如果我在 JSP 中运行以下代码 System out println servlet path request getServletPath System out println requ
  • 如何在 Django 中获取 URL(带有协议和域)(无需请求)?

    我想在 cron 作业中发送邮件 邮件应包含 我的应用程序的链接 在 cron 作业中 我没有请求对象 并且无法使用 request build absolute uri 据我所知 网站框架可以在这里提供帮助 但没有给我协议 http vs
  • 为什么 window.location 无法加载新页面?

    这段代码以前可以工作 但现在不行了 var url myurl id id phase phase window location url 使用 IE 开发工具栏 我已经验证 url 具有有效的 url 并且 window location
  • 想要更改 URL 模式

    这些天 我看到了这样的 URL 模式 http stackoverflow com questions How to do 不是像这样的平常和旧的 http stackoverflow com questions php id 123 or
  • 当 DetailView 遇到时更新模型字段。 [姜戈]

    我有一个类似的 DetailViewviews py views py class CustomView DetailView context object name content model models AppModel templa
  • Apache 重写规则可以使用或不使用尾部斜杠

    我正在尝试重定向一系列静态 URL 并且无论尾部斜杠是否存在 我都希望它能够正常工作 foo bar gt tacos foo bar gt tacos 我已经尝试了以下方法以及各种变体 但我总是只得到尾部斜杠存在的匹配项 RewriteR
  • 对 URL 进行编码 C#

    所以我有一个看起来像这样的 URL http www test com folder1 id 3 但基本上 当他们单击按钮时 我想在 URL 栏中显示与该 id 关联的值的名称 例如 id 3 是名为 Rollex 的手表 所以我想要读取
  • 414 请求 URI 太大错误 Google 地图 v3

    当我调用构造函数来创建具有超过 15 个不同 KMZ 文件的新 KmlLayer 时 似乎会发生此错误 构造函数的调用是 var layer new google maps KmlLayer http 我每次都可以使用 15 个不同的 KM
  • 如何在url请求中发送数组

    我的要求如下 我想给出演员姓名 开始日期 结束日期并获取他在该时期出演的所有电影 因此 我的服务请求是这样的 http localhost 8080 MovieDB GetJson name Actor startDate 20120101

随机推荐

  • 一个docker内不同参数执行个npm run

    dockerfile www wwwroot cat Dockerfile FROM node 12 18 0 alpine3 11 ARG NPM RUN ARG build ARG NPM RUN ARG TWO build story
  • qt序列帧读取

    描述 有时候ui给我们的动画是一序列的图片 播放动画需要一张一张图片读取 显得有点麻烦 存储的资源目录也显得比较凌乱 为解决这个问题 又不想使用gif 可以使用如下自定义序列帧播放组件 一次读取 通过计算当前帧的位置从内存读取当前帧 可以控
  • 027:vue中两列表数据联动,购物车添加、删除和状态更改

    第027个 查看专栏目录 VUE element UI 专栏目标 在vue和element UI联合技术栈的操控下 本专栏提供行之有效的源代码示例和信息点介绍 做到灵活运用 1 提供vue2的一些基本操作 安装 引用 模板使用 comput
  • 手机键盘字母组合

    题目 给定一个仅包含数字 2 9 的字符串 返回所有它能表示的字母组合 给出数字到字母的映射如下 与电话按键相同 注意 1 不对应任何字母 示例 输入 23 输出 ad ae af bd be bf cd ce cf 思路 根据输入的数字
  • 安卓逆向-IDA

    Java层代码是对系统层 so层 的封装 所以假如说APP开发者直接调用系统的接口而不是Java层 有些地方我们hook不出来 所以需要深入去了解so层的接口 IDA的使用 按F5可将汇编代码转C JNI OnLoad so层的hook接口
  • maria数据库随机查询_如何安装Maria DB,创建数据库和执行查询

    maria数据库随机查询 你好朋友 在本教程中 我们将看到 1 如何安装Maria DB 2 如何连接到Maria DB 创建数据库和执行查询 1 如何安装Maria DB 1 1 转到以下链接 然后单击 立即下载10 4 12稳定 按钮
  • JNPF低代码开发平台 新版3.4.6 框架源码分享

    每一个传统行业都有机会变成技术驱动的现代行业 这次疫情正在把很多原来的应急技术变成日常技术 数字化进程中最大的受益者不是互联网企业 而是用互联网改造自己的企业 独木不成林 或许JNPF快速开发平台正是意识到了这一点 才忙着织出一张密集的网
  • Python---多线程编程、基于Socket完成服务端程序开发、基于Socket完成客户端程序开发

    1 进程 程序在操作系统内运行 即成为一个运行进程 线程 进程内部可以有多个线程 程序的运行本质上就是由进程内部的线程在实际工作的 并行执行 多个进程同时在运行 即不同的程序同时运行 称之为 多任务并行执行 一个进程内的多个线程同时在运行
  • redis Hyperloglog 过滤重复

    Redis 中对 HyperLogLog 的应用 首先 在 Redis 中 HyperLogLog 是它的一种高级数据结构 提供有包含但不限于下面两条命令 pfadd key value 将 key 对应的一个 value 存入 pfcou
  • 【Linux】详解套接字编程

    文章目录 网络套接字 1 端口号 1 1认识端口号 1 2端口号VS PID 2 TCP与UDP协议 3 网络字节序 4 socket编程 4 1常用接口 4 2sockaddr结构 4 3 socket接口的底层工作 4 4字符串IP V
  • 计算机视觉、模式识别、机器学习常用牛人主页链接

    牛人主页 主页有很多论文代码 Serge Belongie at UC San Diego Antonio Torralba at MIT Alexei Ffros at CMU Ce Liu at Microsoft Research N
  • Python课堂笔记之输出数组中的数字

    将数组中的数字顺序输出
  • PLSQL中如何进行界面的基本使用和编辑。

    打开plsql后点击左上角的钥匙后可以看到最近登录的用户名和实例名称 System ORCL 其中system代表用户名 ORCL代表实例号 服务名 如何调整关键字的颜色 字体呢 选择Tools gt Preference gt 查看左侧栏
  • PAT乙级1023 组个最小数 (20 分)

    1023 组个最小数 20 分 一 问题描述 给定数字 0 9 各若干个 你可以以任意顺序排列这些数字 但必须全部使用 目标是使得最后得到的数尽可能小 注意 0 不能做首位 例如 给定两个 0 两个 1 三个 5 一个 8 我们得到的最小的
  • map 如何使用结构体作为自定义键值

    在使用map时 有时候我们需要自定义键值 才能符合程序的需要 比如我们需要使用自定义的结构体来作为map的键值 struct Test int x int y 这样直接使用的话 在编译时会出问题 1 gt Build started Pro
  • 【MATLAB第32期】【更新中】基于MATLAB的降维/全局敏感性分析/特征排序/数据处理分类问题MATLAB代码实现

    MATLAB第32期 更新中 基于MATLAB的降维 全局敏感性分析 特征排序 数据处理分类问题MATLAB代码实现 持续更新 本文敏感性分析主要分析分类问题 fisher rf arf nca等 版本更新 2023 8 2 增加基于拥挤距
  • JAVA 创建学生类

    1 题目 编写程序实现如下功能 已知学生类有域变量 学号 班号 姓名 性别 年龄 和方法 获得学号 获得班号 获得性别 获得年龄 修改年龄 显示基本信息 定义一组学生对象 并初始化他们的基本信息 然后依次输出 2 源代码 Student j
  • linux自动挂载NTFS格式移动硬盘

    转自 http blog 163 com cmh lj blog static 100812304201252522119264 由于移动硬盘还有不少的资料 刚插入移动硬盘的时候发现只能自动挂载FAT FAT32格式分区 按照以往的经验 安
  • Python学习-----模块5.0(文件管理大师-->os模块)

    目录 前言 1 os getcwd 2 os listdir path 3 os walk path 4 os path exists path 5 os mkdir path 6 os makedirs path exist ok Tru
  • URI和URL、URN的作用和区别

    前言 我们都知道URL是使用Web浏览器等访问Web页面时需要输入的网页地址 而对URI URN的认识可能很少 更有甚者会像我一样 把URI与URL搞混 还以为是一个东西的不同别名 其实URI是URL与URN的超集 URI包括URL和URN