标准:
RFC3986 - Uniform Resource Identifier (URI): Generic Syntax

html里面有个元素类型叫base,这本来是个简单的概念,但是看了下html标准(https://www.w3.org/TR/WD-html40-970917/htmlweb.html) 中举的一个base设置的例子,我倒有点困惑了,这个例子是这样的:

As an example of relative URL resolution, assume we have the base URL "http://www.acme.com/support/intro.html". The relative URL in the following markup for a hypertext link:
<A href="suppliers.html">Suppliers</A> would expand to the full URL "http://www.acme.com/support/suppliers.html"

这里的base是一个html页面的地址,我之前总以为base应该是个目录的地址。于是去看了下URI的标准,算是明晰了相对URI和base的概念。

相对引用(Relative Reference)和相对路径引用(relative-path reference)

rfd3986 的 4.2. Relative Reference。
并不是说一个URI看起来像文件系统中的相对路径就是相对引用,实际上,按照标准中规定的格式看,没有最前面的scheme(就是http:, ftp: 之类的)的uri都是相对引用,也就是说www.example.com/abc.html也是个相对引用。
相对引用又分为 绝对路径引用相对路径引用,这个划分就和我们分辨文件系统中的相对/绝对路径差不多了: 以 '/' 开头的就是绝对路径引用,否则就是相对路径引用。

base和相对引用的解析

一个相对引用(不管是绝对路径引用还是相对路径引用)都不是一个完整的uri,这就需要解析成完整的uri才能使用,而base就是这个解析这个相对引用的基准。
显然,一个相对引用需要和base以某种方式合并起来,才能构成一个完整的uri,标准文档的5.2. Relative Resolution 给出了解析的过程,这个过程是一个先分解后合并的过程,合并的步骤中包括path的合并这一步,从path合并的说明中,就可以明白为什么base可以设置成一个具体页面的地址。
rfc3986 5.2.3. Merge Paths。
首先,只有当相对引用的path部分是一个相对路径时,其path才需要和base的path进行合并,如果是绝对路径,直接使用绝对路径引用的path。
merge中明确说明: 把相对引用的路径部分添加到base uri的路径 除去最后一段的部分。并且还特别说明除去最后一段就是指除去最右边的'/'后面的任何字符。

结论

base uri中的path部分确实是起到类似指定一个目录的作用,只不过如果你设定的base如果不是以 '/' 结尾,那么使用时就会认为最后一段不是目录而把最后一段去掉,如果是以 '/' 结尾,就认为是一个目录,可以直接使用。

转载于:https://www.cnblogs.com/a-distant-bright-star/p/7066445.html

相对URI以及base的设置相关推荐

  1. tomcat环境变量参数catalina.home和catalina.base的设置位置

    tomcat环境变量参数catalina.home和catalina.base的设置位置 由于我们在Log4j的配置中引入了系统属性${catalina.base},下面讲一下如何设置catalina ...

  2. HTML技能点--使用base标签设置URL访问基准

    点此查看全部文字教程.视频教程.源代码 本文目录 1. 背景 2. base标签的作用 3. 示例 4. 意义 1. 背景 一般我写网页是不使用base标签的,但是经常会在看别人的网页时使用base标 ...

  3. HMS数据库设置和优化

    简介:Hive Metastore (HMS) 是一种服务,用于在后端 RDBMS(例如 MySQL 或 PostgreSQL)中存储与 Apache Hive 和其他服务相关的元数据.本文主要分享H ...

  4. 一些在Android中的小设置~~~持续添加

    1开机图片: android-logo-mask.png android-logo-shine.png 这两个图片一个在上一个在下 ./out/target/common/obj/JAVA_LIBRA ...

  5. Android 系统背光设置

    一.一般设置 1.手动设置背光API // 修改当前Activity界面的窗口亮度 private void setScreenLight(int brightness) {WindowManager ...

  6. VUE+Cesium 初始化地球,加载三维模型(.glb),绘制轨迹线,homebutton 按键重写(默认定位位置的设置)

    Cesium是什么 我们打开Cesium官网,能够很清晰的看到官方赋予Cesium的使命,即构建世界一流的3D地理空间应用程序.那Cesium到底是个什么东东呢? Cesium是一个跨平台.跨浏览器的 ...

  7. linux键盘设置的文件在哪个文件夹,「正点原子Linux连载」第十五章按键输入试验...

    原标题:「正点原子Linux连载」第十五章按键输入试验 第十五章按键输入试验 前面几章试验都是讲解如何使用I.MX6U的GPIO输出控制功能,I.MX6U的IO不仅能作为输出,而且也可以作为输入.I. ...

  8. android 本地地址转换为url,android本地mipmap图片转url、绝对路径转URL URL URI File Path 转换...

    标签: url uri file path File to URI: File file = ...; URI uri = file.toURI(); File to URL: File file = ...

  9. Oracle 20c 新特性:基础级内存数据库免费功能 In-Memory Base Level

    墨墨导读:In-Memory 作为一个选件,是 Oracle 在 12.1.0.2 中引入的一个特性,通过对数据进行列式存储,以加速查询分析的性能.通过这个特性,Oracle 数据库让行存和列存同时存 ...

最新文章

  1. 成功之路该如何走--工作半年的思考
  2. 最近学习了责任链模式
  3. linux查看时间同步服务,Linux系统时钟同步服务NTPD配置方法
  4. IOS仿微信朋友圈的日期处理
  5. Spring核心知识
  6. rsa PHP用法,RSA常见用法整理
  7. quartus仿真29:JK触发器实现序列信号发生器0010111(分析)
  8. 还在痴迷于大数据?未来 “小数据” 会让你大开眼界
  9. python类的数组属性_python3库numpy数组属性的查看方法
  10. 公用计算机打不开扫雷,win7系统“扫雷”游戏无法打开问题的处理方法
  11. 微信语音识别开放平台
  12. 计算机在高分子材料中的应用软件,计算机技术在高分子材料工程中的应用(10页)-原创力文档...
  13. mysql+美团点评_美团点评Mysql高可用架构:MGR
  14. 公司会议如何保证高效
  15. 过等保是什么意思?能简单解释下吗?
  16. 应用系统如何与外部渠道进行对接?java代码实现篇
  17. 圣盈信金服集团公布2018年上半年未经审计财务业绩
  18. 优秀!研二实习生“阿里+字节+拼多多+美团”四杀offer
  19. 企业常用服务器硬件介绍,以及部署RAIO,和部署LNMP
  20. 数据治理:数据质量的度量维度!

热门文章

  1. 网络安全设备常用默认弱口令
  2. xmlrpc.php 漏洞利用
  3. JS 调试(debug)
  4. C/C++端口复用SO_REUSEADDR(setsockopt参数)
  5. golang日志输出
  6. Linux系统编程:fork函数的使用【循环创建N个子线程】
  7. 深入研究Java中一个对象的初始化过程
  8. [转]UE/UI/UCE/UED的区别 附UED团队网站链接
  9. 如何通过数据分析鉴别假微博大V?
  10. 物联卡查询流量_物联卡流量查询_python_API文档_开发指南_物联网无线连接服务 - 阿里云...