题记:在使用
Document.referrer
获取跳转到当前页面的上个页面 “URL” 时发现:
返回结果与浏览器地址栏中的 URL 不同
从同一个页面跳转到不同目标页面后,获取的上个页面 “URL” 均不一样
Document.referrer
首先,需要“澄清”一点,Document.referrer
返回的是URI
。很多帖子都说 Document.referrer
返回的是URL
,但事实并非如此,MDN(点击我了解更多)解释如下:
URI 与 URL 的区别
接下来,我会结合 URI 与 URL 二者的区别来解释上面提到的两种情况。我就不贴长篇大论的基础概念啦,大家可以去百度一下,我说说实战得来的个人理解。
URI
URI 的全称是 Uniform Resource Identifier ,统一资源标识符。通俗来讲, URI 是唯一标识某个互联网资源的字符串,是用来区别于其他资源的唯一的标识。
为什么要重点突出用来区别于其他资源的唯一标识这点呢?因为 URI 实现区别于其他资源的方式有些“特别”: URI 不是绝对、固定的,而是相对的。
以下结合题记提出的第二种异常情况谈谈相对的 URI 。
场景:我从一个起点页面分别进入两个不同目标页面并获取起点的 URI 。
- 起点页面:
https://console.polyv.net/home/#/
- 1号目标:
https://console.polyv.net/live/index.html#/channel
- 2号目标:
https://my.polyv.net/secure/main
结果:获取的两个 URI 不一样。
1号目标获取 URI 如下: 2号目标获取 URI 如下:
细心的小伙伴会发现,明明是同一个起点页面,为什么获得的 URI 会不一样呢?这就是 URI 的 “相对性”!
从1号目标的角度上看,获得的 URI 是相对于1号目标独一无二的 URI,2号目标也同理。或许这么说大家还是有些不理解,用生活中的例子来解释一下 URI 相对的概念(感谢一楼提出疑问的小伙伴!):
小明是广东省广州人,他出国时会介绍自己是中国人,出省时会介绍自己是广东人,出市时会说介绍自己是广州人。小伙伴们掌握规律了吗?我们仅会介绍相对于他人不一样的部分,URI 也一样!
解释灵感来源于uri和url的区别与联系(一看就理解)_url和uri的区别-CSDN博客。
URL
URI 的全称是 Uniform Resource Locator ,统一资源定位符。它不仅唯一标识资源,还提供了定位资源的位置信息。
二者区别
维基百科解释 URI 与 URL、URN 的关系: URI可被视为定位符(URL),名称(URN)或两者兼备。统一资源名(URN)如同一个人的名称,而统一资源定位符(URL)代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。
URL 是 URI 一种实现,是 URI 的一个子集。 URI 是能够唯一标识资源的字符串。类比我们现实生活,能标识一个人的身份证号就是 URI,而家庭住址也能标识一个人,所以也是 URI 。URL 就相当于我们的家庭住址,通过描述人的位置来确定一个人,所以 URL 是 URI 子集。
综上所述,URL 一定是 URI,而 URI 不一定是 URL,这就解释了为什么出现题记中第一个情况。
结束语
本次小分享又结束啦,友友们如果有疑问或不同见解欢迎评论哦!