URL简介
每个服务器资源都有一个自己的名字,服务器资源名被称为统一资源标识符(URI),用于唯一标识标识并定位资源。URI 是一个通用的概念,由两个主要的子集 URL 和 URN 组成。 URL是通过描述资源的位置来标识资源的,而 URN 是通过名字来标识资源。
http规范将更通用的 URI 作为资源标识符,但在http应用程序实际使用中,更常见的是处理URL。
URL 语法
大部分 URL 方案的 URL语法格式如下:
<scheme>://<user>:<password>@<host>:<port>/<path>;<parame>?<query>#<frag>
URL 最常用的3个部分是方案(scheme),主机(host)和路径。组件的介绍如下:
| 组件 | 描述 | 默认值 |
|---|---|---|
| 方案(scheme) | 访问服务器获取资源时使用的协议。 | 无 |
| 用户(user) | 某些方案访问资源时的用户名。 | 匿名 |
| 密码(password) | 用户名后面可能需要的密码,中间冒号隔开。 | 无 |
| 主机(host) | 资源所在服务器的IP或主机名。 | 无 |
| 端口(port) | 协议特有。 | 无 |
| 路径(path) | 服务器上资源的本地名,由一个/与前面的组件分隔开,路径组件语法与服务器和协议相关。 | 无 |
| 参数(parame) | 某些协议会使用这个组件来指定输入参数,参数为键值对(等号连接),URL中可以包含多个参数,它们之间以及与路径的其它部分用分号隔开 | 无 |
| 查询(query) | 某些协议会使用这个组件传递参数,参数为键值对(等号连接),多个参数&连接 | 无 |
| 片段(frag) | 一小部分资源的名字,不会将#及其后面的发送给服务器,仅在客户端使用 | 无 |
绝对和相对URL
URL有两种方式:绝对和相对。
相对 URL 是不完整的,要从相对 URL中获取访问资源就必须相对于另一个URL 进行解析。然后,根据相对URL的语法,将它与基础URL组合以形成其绝对形式。
通常会在html文档中看到相对URL。在这种情况下,有两种方法可以找出基础URL是什么。
- 可能在文档中明确指定了基本URL 标签。
- 如果未指定基本URL,则应将找到相对URL的html文档的URL视为基础URL。
URL中的特殊字符
在 URL中有几组特殊字符需要注意:
- 保留字
| 字符 | 描述 |
|---|---|
% | 保留字,编码字符的转义标志 |
# | 保留字,分段定界符 |
; | 保留字,参数定界符 |
/ | 保留字,路径分隔定界符 |
. ,.. | 保留字,路径组件中使用 |
? | 保留字,查询定界符 |
: | 保留字,用户密码定界符,主机端口定界符 |
@ | 保留字,某些 scheme 中有特殊意义 |
& | 保留字,某些 scheme 中有特殊意义 |
= | 保留字,某些 scheme 中有特殊意义 |
+ | 保留字 |
$ | 保留字 |
, | 保留字 |
- 不希望出现的字符
| 字符 | 描述 |
|---|---|
{,},` | ,`,^,[,],“`”,~ |
<,>," | 不安全,这些字符在URL 之外通常是有意义的,例如,在文档中对URL自身定界,可能造成使用上的歧义 |
| 超出US-ASCII字符集的字符 | URL使用的是 US-ASCII字符集 |
URL通过转义来实现表达上诉字符的功能,这种转义表达方式为: %后面跟上两个表示 ASCII 码的16进制数。
| 字符 | 转义 |
|---|---|
| % | %25 |
| space | %20 |
| tab | %09 |
| = | %3D |
汉字“春节”不是URL的合法字符,所以被浏览器自动转成 %E6%98%A5%E8%8A%82
其中,“春”转成了%E6%98%A5,“节”转成了%E8%8A%82。这是因为“春”和”节“的UTF-8编码分别是E6 98 A5和E8 8A 82,将每个字节前面加上百分号,就构成了URL编码。