1 概述
HTTP协议通过资源才能寻找到请求服务器位置,换句话说资源可以称为各种网络服务的资源地址。
2 URI
URI是通用的资源标示符,其包含URL和URN两个子集。其中URL是通过描述符的位置来标识资源的;URN是通过名字来标识资源的。
3 URL语法
基本语法格式如下
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
- : 访问服务器使用的协议,比如http代表HTTP协议。(必需)
- : 某些scheme访问时需要的用户名,默认为匿名。
- :用户名后面可能需要包含密码,用户名和密码中间用:分隔。
- :资源所在服务器的域名或者ip。所有用户名或密码则需要在host前加@。(必需)
- :资源所在服务器正在监听此服务的端口号,默认的HTTP端口号是80,HTTPS是443.
- :服务器上资源的本地路径,用/和之前部分区分开。(重要)
- :某些scheme可能需要这个组件来指定输入参数,参数为键值对。多个参数之间以;分隔,与前面的路径也是以;分隔
- :使用此参数传递参数以激活应用程序,用符号?跟之前的部分分隔开,查询组件之间用符号&分隔。
- :一小片或一部分资源的名字,引用对象时不会将frag字段传送给服务器;这个字段是在客户端内部使用的,通过符号#与其他部分Url分隔。
3.1 相对URL
相对URL时基于完整URL的缩写,其是基于基础URL,在基础URL上加上相对URL路径。其中基础URL可以通过以下途径获得:
- 首先,若资源中显式指定了基础URL,则直接使用。例如HTML中使用标记指定。否则
- 若当前资源存在URL,使用当前资源的URL作为基础URL。
- 否则,此URL为一个绝对URL,若不是则失败。
4 URL字符集
4.1 编码
编码机制就是通过一种“转义”表示法来表示不安全的字符。URL的转义有一个 % 后跟两个表示ASCII码的十六进制数表示。例如空格是%20
4.2 字符限制
一些特殊字符被保留起来,有着特殊含义,如下:
字符 | 含义 |
---|---|
% | 保留作为编码字符的转义标志 |
/ | 保留作为路径组件中分隔路径段的定界符 |
. | 保留在路径组件中使用 |
.. | 保留在路径组件中使用 |
# | 保留作为分段定界符 |
? | 保留作为查询字符串定界符 |
; | 保留作为参数定界符 |
: | 保留作为scheme、user/password, host/port定界符 |
$, + | 保留 |
@, &, = | 在某些scheme中有特殊含义 |
{} | \^~[]’ |
<>” | 不安全,需要编码 |
0x00-0x1f,0x7f | 首先,ASCII码中不可打印区域 |
>0x7f | 受限,不在ASCII中 |
5 Scheme
常见的scheme说明如下:
- http 超文本传输协议,基本格式:
http://<host>:<port>/<path>?<query>#<frag>
- https 使用了ssl加密机制的http协议,基本格式
https://<host>:<port>/<path>?<query>#<frag>
- mailto 指向的是email地址,基本格式
mailto:xxx@xx.xx
- ftp 文件传输协议url,基本格式:
ftp://<user>:<password>@<host>:<port>/<path>;<params>
- rtsp,rtspu 可以通过实时流传输协议解析音视频媒体的资源的标识符。后者表示是udp协议来获取资源。基本格式
rtsp://<user>:<password>@<host>:<port>/<path>
和rtspu://<user>:<password>@<host>:<port>/<path>
- file 一台指定主机(本地或网络文件系统)上可以直接访问的文件。基本格式
file://<host>/<path>
- news 位置无关的,不依赖于任何一个源服务器。也没有指定其源服务器地址,基本格式:
news"<newsgroup>
和news:<news-article-id>
- telnet 用于访问交互式业务资源。基本格式:
telnet://<user>:<password>@<host>:<port>/