当前位置: 首页 > news >正文

【面试题】HTTP 协议中 URI 和 URL 的区别

URI: Uniform Resource Identifier, 统一资源标识符。用来唯一标识资源,是一种语义上的抽象概念。

URL: Uniform Resource Locator, 统一资源定位符。用来定位唯一的资源, 必须提供足够的定位信息。

1. URI和URL的区别:

统一资源标识符URI就是在某一规则下能把一个资源独一无二地标识出来。

拿人做例子,假设这个世界上所有人的名字都不能重复,那么名字就是URI的一个实例,通过名字这个字符串就可以标识出唯一的一个人。

现实当中名字当然是会重复的,所以身份证号才是URI,通过身份证号能让我们能且仅能确定一个人。

那统一资源定位符URL是什么呢。也拿人做例子然后跟HTTP的URL做类比,就可以有:

动物住址协议://地球/中国/浙江省/杭州市/西湖区/某大学/14号宿舍楼/525号寝/张三.人

可以看到,这个字符串同样标识出了唯一的一个人,起到了URI的作用,所以URL是URI的子集。URL是以描述人的位置来唯一确定一个人的。

在上文我们用身份证号也可以唯一确定一个人。对于这个在杭州的张三,我们也可以用:

身份证号:123456789 来标识他。

所以不论是用定位的方式还是用编号的方式,我们都可以唯一确定一个人,都是URl的一种实现,而URL就是用定位的方式实现的URI。

回到Web上,假设所有的Html文档都有唯一的编号,记作html:xxxxx,xxxxx是一串数字,即Html文档的身份证号码,这个能唯一标识一个Html文档,那么这个号码就是一个URI。

而URL则通过描述是哪个主机上哪个路径上的文件来唯一确定一个资源,也就是定位的方式来实现的URI。

对于现在网址我更倾向于叫它URL,毕竟它提供了资源的位置信息,如果有一天网址通过号码来标识变成了http://741236985.html,那感觉叫成URI更为合适,不过这样子的话还得想办法找到这个资源咯…

2. 两者的作用

2.1 url的作用

        url一般是一个完整的链接,我们可以直接通过这个链接(url)访问到一个网站,或者把这个url复制到浏览器访问网站。 使用URL时我们就是一个直接用户的角色,直接访问就完事了。

2.2 uri的作用

        uri并不是一个直接访问的链接,而可以是相对地址(当然如果相对于浏览器那么uri等同于url了)。这种概念更多的是用于编程中,因为我们没必要每次编程都用绝对url来获取一些页面,这样还需要进行分割“http://xx/xxx”前面那一串,所以编程的时候直接request.getRequestURI就行了,当然如果是重定向的话,就用URL。

转自知乎

相关文章:

  • linux基于用户身份对资源访问进行控制的解析及过程
  • RabbitMQ 和 Kafka 对比
  • FPGA - 231227 - 5CSEMA5F31C6 - 电子万年历
  • GoLang学习之路,对Elasticsearch的使用,一文足以(包括泛型使用思想)(二)
  • redis,memcached,nginx网络组件,网络编程——reactor的应用
  • 原生js浪费性能吗?
  • 虚函数的讲解
  • 华清远见嵌入式学习——ARM——作业4
  • 如何通过 useMemo 和 useCallback 提升你的 React 应用性能
  • Python和Java的优缺点
  • Properties
  • 81 使用DFS和BFS解机器人的运动范围
  • 机器学习系列--R语言随机森林进行生存分析(1)
  • 模型部署之——ONNX模型转RKNN
  • Linux shell编程学习笔记38:history命令
  • 4个实用的微服务测试策略
  • css系列之关于字体的事
  • ECMAScript6(0):ES6简明参考手册
  • Intervention/image 图片处理扩展包的安装和使用
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Selenium实战教程系列(二)---元素定位
  • SpringBoot 实战 (三) | 配置文件详解
  • 初识MongoDB分片
  • 实习面试笔记
  • 首页查询功能的一次实现过程
  • 我看到的前端
  • 携程小程序初体验
  • 译自由幺半群
  • Android开发者必备:推荐一款助力开发的开源APP
  • Spring第一个helloWorld
  • 进程与线程(三)——进程/线程间通信
  • ​ArcGIS Pro 如何批量删除字段
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # 达梦数据库知识点
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #define、const、typedef的差别
  • #mysql 8.0 踩坑日记
  • %@ page import=%的用法
  • (12)目标检测_SSD基于pytorch搭建代码
  • (2015)JS ES6 必知的十个 特性
  • (C语言)fread与fwrite详解
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (补)B+树一些思想
  • (差分)胡桃爱原石
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • **python多态
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .gitignore文件---让git自动忽略指定文件
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .net 程序发生了一个不可捕获的异常