URL 是 统一资源定位符( uniform resource locator )的缩写,顾名思义就是用来定位网络资源的。URL 有时也被称为 URI ,URI 则是 统一资源标识符( 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 。换言之,相对 URL 是 URL 的一种简写形式。
跟文件系统一样,讨论相对 URL 需要一个参照物,即基础 URL 。因为相对 URL 是不完整的,必须相对于另一个能提供完整信息的 URL ,才能推导出完整 URL 。
以网页为例,基础 URL 通常就是当前网页的 URL 。以基础 URL 为参照物,页面中的其他 URL 可以写成相对形式。接下来,我们来看几个例子:
假设本页的 URL 是 https://fasionchan.com/network/http/url/ ,以此为参照。
绝对路径
本章有一小节是介绍 Web 应用的,相对 URL 可以只写路径部分: /network/http/web/ 。浏览器访问这样的相对 URL 时,根据当前页面的基础 URL ,即可推导出绝对 URL 。
相对路径
上面这个例子,相对 URL 只写路径部分,而路径是完整的绝对路径。实际上,路径部分也可以用相对路径形式: ../web/ 。同样,浏览器会根据当前页面的基础 URL ,推导出完整的 URL 。
协议跟随
Web 网站中的静态资源一般由 CDN 加速,小菜的网站就是用阿里 CDN 提供字体资源,地址是:
|
|
访问网站的协议现在是 HTTP 和 HTTPS 并存,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 ,顾名思义表示接收人的邮箱地址:
点击这个 URL 后,系统将自动调起邮箱客户端发件窗口,向指定邮箱发邮件。
查询参数
访问网页经常需要传一些参数,比如访问图书详情页需要图书的 ID ,这可以通过查询参数来传:
|
|
这个 URL 通过查询参数 isbn 来传递图书的 ID 。
数据库连接串
后端服务连接数据库,有赖于数据库的服务器地址、端口、用户、密码等信息。这些信息可以组织成一个 URL ,这就是所谓的数据库连接串:
|
|
下面是一个典型的数据库连接串,用来连接 MongoDB :
|
|
- 数据库类型:MongoDB
- 服务器地址:10.0.0.1
- 端口:27017
- 认证用户:test
- 密码:123456
- 访问数据库名:demo
【小菜学网络】系列文章首发于公众号【小菜学编程】,敬请关注: