深入理解统一资源定位符:URL

URL统一资源定位符uniform resource locator )的缩写,顾名思义就是用来定位网络资源的。URL 有时也被称为 URIURI 则是 统一资源标识符uniform resource identifier )的缩写。

有人说 URI 只用于标识区分资源,而 URL 还包含如何找到(定位)到资源的信息,是前者的子集。尽管如此,由于日常交流这两个术语经常混着用,我偏向认为两者是一样的。

我们知道,Web 应用中的 HTML 网页、JavaScript 源码、 CSS 样式表以及图片等多媒体资源,都可以通过一个 URL 来访问。URL 唯一标识一个网络资源,并指明了获取它的方式。

虽然 URL 成名于 Web 应用,也经常被称为 Web 地址,但它的使用场景远不止 Web 。我们前面看到的 URL 的结构也比较简单,但 URL 的语法其实支持更为复杂的结构。

语法结构

URL 的完整语法结构如下图所示,总共包含七个部分:

  • 模式schema ),相当于 URL 的类型,通常用来表示访问协议,比如 HTTP
  • 用户信息userinfo ),用于访问资源的用户信息,可选;
  • 主机host ),资源所在主机,可选;
  • 端口port ),资源所在主机端口,可选,不填则使用协议的默认端口;
  • 路径path ),资源所在路径;
  • 查询query ),用于访问资源的参数,比如网页传参,可选;
  • 片段fragment ),指定资源中的某个片段,比如网页中的锚,可选;

相对URL

URL 有两种不同写法:一种是 绝对的 ,也就是完整的 URL ;另一种是 相对的 。相对 URL 虽然并不完整,但跟文件系统中的相对路径一样,可以推导出完整的 URL 。换言之,相对 URLURL 的一种简写形式。

跟文件系统一样,讨论相对 URL 需要一个参照物,即基础 URL 。因为相对 URL 是不完整的,必须相对于另一个能提供完整信息的 URL ,才能推导出完整 URL

以网页为例,基础 URL 通常就是当前网页的 URL 。以基础 URL 为参照物,页面中的其他 URL 可以写成相对形式。接下来,我们来看几个例子:

假设本页的 URLhttps://fasionchan.com/network/http/url/ ,以此为参照。

绝对路径

本章有一小节是介绍 Web 应用的,相对 URL 可以只写路径部分: /network/http/web/ 。浏览器访问这样的相对 URL 时,根据当前页面的基础 URL ,即可推导出绝对 URL

相对路径

上面这个例子,相对 URL 只写路径部分,而路径是完整的绝对路径。实际上,路径部分也可以用相对路径形式: ../web/ 。同样,浏览器会根据当前页面的基础 URL ,推导出完整的 URL

协议跟随

Web 网站中的静态资源一般由 CDN 加速,小菜的网站就是用阿里 CDN 提供字体资源,地址是:

1
https://at.alicdn.com/t/font_1650802_d06bbv5zd14.js

访问网站的协议现在是 HTTPHTTPS 并存,CDN 也支持这两种协议。一般如果使用 HTTP 协议访问网站,对应地也使用 HTTP 协议访问 CDN 资源。这样的话,网页中的 URL 需要写两个版本,一个用 HTTP ,一个用 HTTPS 。很显然,这不太科学。

不过通过相对 URL ,我们可以实现协议跟随:让协议部分从基础 URL 继承。换句话讲,协议部分不写,就采用跟基础 URL 一样的协议。

因此,小菜的网站中的 CDN 静态资源,都不写协议部分,直接从 // 开头。这样一来,如果您用 HTTP 协议访问本站,浏览器就自动在 // 前拼上 http: ;如果用 HTTPS 访问,就自动拼上 https: ,非常省事。

常见用法

访问协议

模式字段描述 URL 的类型,通常用来表示访问协议,示例如下:

模式/协议 URL 说明
HTTP http://cors.fasionchan.com/about.html 表示通过 HTTP 协议访问(的网页)
HTTPS https://fasionchan.com/about.html 表示通过 HTTPS 协议访问(的网页)
FTP ftp://file.fasionchan.com/about.txt 表示通过 FTP 协议访问(的文本文件)

邮箱地址

下面这个 URL 的模式是 mailto ,顾名思义表示接收人的邮箱地址:

mailto:xiaocai@fasionchan.com

点击这个 URL 后,系统将自动调起邮箱客户端发件窗口,向指定邮箱发邮件。

查询参数

访问网页经常需要传一些参数,比如访问图书详情页需要图书的 ID ,这可以通过查询参数来传:

1
https://fasionchan.com/books/?isbn=9787115352118

这个 URL 通过查询参数 isbn 来传递图书的 ID

数据库连接串

后端服务连接数据库,有赖于数据库的服务器地址、端口、用户、密码等信息。这些信息可以组织成一个 URL ,这就是所谓的数据库连接串:

1
[数据库类型]://[用户]:[密码]@[服务器地址]:[端口]/[库名]?[参数①]=[值①]&[参数②]=[值②]

下面是一个典型的数据库连接串,用来连接 MongoDB

1
mongodb://test:123456@10.0.0.1:27017/demo?replicaSet=demo
  • 数据库类型:MongoDB
  • 服务器地址:10.0.0.1
  • 端口:27017
  • 认证用户:test
  • 密码:123456
  • 访问数据库名:demo

小菜学网络】系列文章首发于公众号【小菜学编程】,敬请关注:

【小菜学网络】系列文章首发于公众号【小菜学编程】,敬请关注: