常见的各种链接都是什么格式——URL科普

平常我们总是能见到各种各样的链接,比如

  • https://www.bilibili.com/video/BV1GJ411x7h7?mid=114514&p=1&share_from=ugc&share_medium=android&share_plat=android&share_source=COPY&share_tag=s_i&timestamp=1658778647&unique_k=8yqWp46
  • https://music.163.com/song?id=18520488&userid=1919810
  • steam://install/1172470

等等。这些链接往往都很长又非常复杂,而且一些链接里还带跟踪参数什么的,有可能会泄露出一些你不想泄露的个人信息。本文将介绍平常见到的各种链接的具体格式,以及如何删除链接中的无用参数和跟踪参数,从而缩短你的链接

URL协议

我们平常看到的各种链接几乎全都是URL格式的。URL的全称是Uniform Resource Locator(统一资源定位符)。在讲解URL之前,我们需要先了解一下为什么我们需要URL。我们在分享链接的时候是在分享什么?一个指定的网络资源的位置。我们通过链接来确定我们要获取的资源的地址,从而让我们的各种软件可以找到我们需要的资源
URL就是一个表示资源地址和获取方法的协议。如同我们描述一个地理位置一样,我们可能会用国家-省-市-区-道路编号这种格式来描述一个地址。当我们表示一个网上的资源的地址的时候,我们也需要一种格式来表示一个地址,这个格式就是URL

URL的格式基本上是这样的

<scheme>://<user>:<password>@<host>:<port>/<url-path>

是不是有亿点复杂?没关系,这个是完整的格式,其中很多参数都是可选的。我们一个个参数来看

scheme: 连接地址所需的协议。我们最常见的协议就是http(s)协议。http(s)协议用于访问网页

user@password:这个参数比较少见,是个可选参数,用于在连接时附加用户名和密码,常见的连接里都是没有这个的,知道一下就行

host:port: 表示要访问的服务器的地址和端口,常见的连接里也不会写端口,直接就是个host

/url-path: 这段就是要访问的文件的具体地址。如果说host指的是要找哪个大楼的话,那url-path就是大楼里的具体门牌号。知道要访问的文件的具体路径才能最终帮助我们找到文件

我们先以http(s)为例

http(s)链接的格式

以这个连接为例
https://www.bilibili.com/video/online.html
我们拆分开来看

https://: 表示访问这个连接时要使用访问网页的https协议
www.bilibili.com: 表示要访问的服务器的地址,这里是b站的网页服务器的地址

/video/online.html: 要访问的文件的具体地址,可以理解成访问的是/video目录下的online.html文件

这就是个简单的连接的基本结构

但是等等,我们平常访问的连接好像没这么简单啊?在url-pattern后面为什么会有个问号?文件名里不是不允许有问号的吗?而且后面还跟了一大堆莫名其妙的参数。这些都是可选的查询参数

查询参数

查询参数可以在你访问你要的文件的时候提供一些额外信息,比如需要的文件格式等。这种参数的基本格式是?参数1=值1&参数2=值2&参数3=值3...

以上文的https://music.163.com/song?id=18520488&userid=1919810为例,这个链接里跟了两个查询参数iduserid,值分别是185204881919810。网易云音乐在你访问音乐播放页面的时候访问的连接其实一直都是https://music.163.com/song,具体播放哪首歌由后面的查询参数id=18520488决定, 若不指定则无法播放。后面的userid=1919810并不会影响播放,只是指定分享这首歌的用户的id。

知道了这一点后,我们就可以缩短链接并删除不需要的查询参数了。以https://www.bilibili.com/video/BV1GJ411x7h7?mid=114514&p=1&share_from=ugc&share_medium=android&share_plat=android&share_source=COPY&share_tag=s_i&timestamp=1658778647&unique_k=8yqWp46为例,这个链接长得一匹,后面还跟了一大堆可能会泄露个人信息的跟踪参数。b站的视频是根据BV号来确定的,所以这里的所有跟踪参数对于视频播放都是没有影响的,所以问号及后面的查询参数全都可以安全删除,我们就可以把链接缩短成https://www.bilibili.com/video/BV1GJ411x7h7,一样可以正常播放。

感兴趣的话还可以猜测一下链接后面的一大堆参数的具体作用。简单猜测和分析可知,mid=114514是分享这个链接的用户的b站uid,share_medium=android表示这个用户是通过安卓平台分享的链接,share_source=COPY表示分享方式是复制链接,timestamp=1658778647表示分享这个链接的时间戳,用一些在线时间戳转换网站转换可知这个链接被分享的时间是2022-07-26 03:50:47。因此,删除这些参数除了可以大幅缩短链接长度外,也能防止部分个人信息被泄露出去。

其他类型的URL

其他的URL和http(s)也差不多,都是这种格式,比如steam一键入库APEX的链接是
steam://install/1172470
简单分析可知,协议是steam,访问的路径是install/1172470

邮件发送链接是
mailto:xxx@xxx.com
协议是mailto(部分URL是没有//的),访问的路径(目标邮箱)是xxx@xxx.com

参考文献:rfc1738

文章作者: Light_Quanta
文章链接: https://lq0.tech/2022/07/28/url/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY 4.0 许可协议。转载请注明来自 Light_Quanta's Site