
URL通过不同方案进行不同资源的访问,不同方案URL语法会有些差异;但大多数URL方案的URL语法如下:
/**
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
*/
URL最重要的三个部分是方案(scheme),主机(host)和路径(path),具体说明如下表:
| 组件 | 描述 | 默认值 |
|---|---|---|
| 方案(scheme) | 访问服务器获取资源时要使用哪种协议 | 无 |
| 用户(user) | 某些方案访问资源时需要的用户名 | 匿名 |
| 密码(password) | 用户名后买你可能要包含的密码,中间由冒号(:)分隔 | |
| 主机或域名(host) | 资源宿主服务器的主机名或点分IP地址 | 无 |
| 端口(port) | 资源宿主服务器正在监听的端口号。很多方案都有默认的端口号(HTTP的默认端口号为80) | 每个方案特有 |
| 路径(path) | 服务器上资源的本地名,由一个斜杠(/)将其与前面URL组件分隔开来。路径组件的语法是与服务器和方案有关的 | 无 |
| 参数(params) | 某些方案会用这个组件来指定输入参数。参数为名/值对。URL中可以包含多个参数字段,它们相互之间以及与路径的其余部分用(;)分隔 | 无 |
| 查询(query) | 某些方案会用这个组件传递参数以激活应用程序。查询组件的内容没有通用格式。用字符”?"将其与其余部分分隔开来 | 无 |
| 片段(frag) | 一片或一部分资源的名字。引用对象时,不会将frag字段传送给服务器;这个字段是在客户端内部使用的。通过字符“#”将其与其余部分分隔开来 | 无 |
* 主机组件标识了能够访问资源的宿主机器(域名或IP地址)
*端口组件标识了服务器正在监听的网络端口
指Web客户端可以理解并使用的几种快捷方式
基础URL是作为相对URL参考点是用,可以来自以下几个不同的地方

用户不需要输入完整的URL,浏览器会自动扩展。有以下两种方式
URL是可移植的。它要统一第命名因特网上的所有资源,并且需要符合不同协议的传输规范,所以只能使用较小的,通用的安全字母表中的字符。但使用过程中,会遇到传递除安全字符外的其他字符,此时,就需要进行转义,再进行传输;
URL使用的字符集为US-ASCII字符集,有如下原因:
使用转义来表示不安全字符,此转义表示法包含一个百分号(%),后面跟着两个字符ASCII码的十六进制数,常用的转义字符如:
| 字符 | ASCII码 | 示例 |
|---|---|---|
| ~ | 126(0x7E) | https://xxx/%07E |
| 空格 | 32(0x20) | https://xxx/%20xxx |
| % | 37(0x25) | https://xxx/100%25 |
URL中,有几个字符被保留起来,有特殊含义,有些字符不在定义的US-ASCII可打印字符集中,有些则会与某些因特网网关和协议产生混淆。以下字符,除了用于保留用途之外的场合时,要在URL中进行编码
| 字符 | 保留/受限 |
|---|---|
| % | 保留作为编码字符的转义标志 |
| / | 保留作为路径组件中分隔路径段的界定符 |
| . | 保留在路径组件中使用 |
| … | 保留在路径组件中使用 |
| # | 保留作为分段定界符使用 |
| ? | 保留作为查询字符串定界符使用 |
| ; | 保留作为参数定界符使用 |
| : | 保留作为方案、用户/口令,以及主机/端口组件的定界符自用 |
| $ , + | 保留 |
| @ & = | 在某些方案的上下文中有特殊含义,保留 |
| { } | \ ^ ~ [ ] ‘ | 由于各种Agent代理,比如各种网关的不安全处理,使用受限 |
| < > " | 不安全;这些字符在URL范围之外通常是有意义的,比如在文档中对URL自身进行定界,所以应该对其进行编码 |
| 0x00-0x1F,0x7F | 受限,这些十六进制范围内的字符都在US-ASCII字符集的不可打印区间内 |
| >0x7F | 受限,十六进制值在此范围内的字符都不在US-ASCII字符集的7比特范围内 |