@Dale-Lin
2019-07-30T15:43:18.000000Z
字数 3439
阅读 3063
HTTP
URI 包含 URL 和 URN。
URL 是以地址来标识资源的;URN 是以名字来标识资源的,与位置无关。
例如 URL http://www.joes-hardware.com/seasonal/index-fall.html
分为以下三部分:
1. URL 方案(scheme):可以告知 web 客户端怎样访问资源,本例http://
说明使用 HTTP 协议。
2. 服务器地址:告知 web 客户端资源位于何处www.joes-hardware.com
。
3. 资源路径:说明请求的是服务器上哪个特定的本地资源/seasonal/index-fall.html
。
URL 可以通过其他协议来访问资源:
URL 最重要的3部分是方案(scheme)、主机(host)和路径(path)。
大多数 URL 方案的语法都建立在由9部分构成的通用格式上:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
几乎没有 URL 用到了所有的组件。
组件 | 描述 | 默认值 |
---|---|---|
scheme | 访问服务器以获取资源时要使用哪种协议 | 无 |
user | 访问时的用户名 | 匿名 |
password | 用户名后面可能要包含的密码,中间由 : 分隔 | E-mail地址 |
host | 资源宿主服务器的主机名或点分ip地址 | 无 |
端口 | 宿主服务器正在监听的端口号(HTTP默认端口号为80) | 每个方案特有 |
path | 服务器上资源的本地名,以 / 分隔 | 无 |
param 参数 | 名值对,可以包含多个,相互之间以 ; 分隔 | 无 |
query 查询 | 某些方案会用这个组件传递参数以激活应用程序(数据库、公告板、搜索引擎以及其他因特网网关)。用 ? 和其他取件分隔 | 无 |
片段 | 一小片资源的名字,引用对象时,不会传递给服务器,是在客户端内部使用的。通过 # 分隔 | 无 |
scheme 由“:”与其他 URL 组件分隔,大小写无关。
分别提供 主机地址 : 主机上能访问目标资源的服务器。
主机地址可以使用主机名(www.joes-hardware.com),或者 IP 地址(161.58.228.45)表示。
端口标识了服务器正在监听的网络端口。对下层使用了 TCP 协议的 HTTP 来说,默认端口号为 80。
对于 HTTPS 来说,默认端口号是 443.
很多服务器要求输入用户名和密码才允许访问数据,例如FTP:
如果访问 FTP 地址时没有指定用户名和密码,会插入 anonymous 作为用户名,并发送一个默认密码(IE 发送 IEUser)
path 指定了目标资源位于服务器的什么地方。通常像一个分级的文件系统路径(/seasonal/index-fall.html)
可以用 / 将HTTP URL的路径组件划分为一些路径段(path segment)。每个路径段都有自己的参数(param)组件。
负责解析 URL 的应用程序需要访问协议的参数来访问资源,否则服务器可能无法提供服务甚至错误服务。
参数组件是 URL 中的名值对列表,由 ; 将其与 URL 的其余部分(以及各名值对)分隔开,例如:
ftp://prep.ai.mit.edu/pub/gnu;type=d
多个路径段时每个都可以有自己的参数组件:
http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true
很多资源(如数据库服务)都可以通过查询来缩小请求资源类型范围,通过 &
并列。
例如:
http://www.joes-hardware.com/inventory-check.cgi?item=12731
? 右边是一个查询组件,查询 Web 数据库网管编号为12731的条目是否有货。
例如:
http://www.joes-hardware.com/inventory-check.cgi?item-12731&color=blue&size=large
查询是否有尺寸为large、颜色为blue的条目12731.
使用 # 加上 frag 组件来指向一个资源内部的片段,例如:
http://www.joes-hardware.com/tools.html#drills
HTTP服务器通常处理的是整个对象,而不是片段,客户端也不能发送片段给服务器。所以浏览器从服务器获取整个资源后,会根据片段来显示指定部分的资源。
相对 URL 是不完整的,相对于另一个基础(base) URL 进行解析。
处理相对 URL 的应用程序(例如浏览器)要能在相对和绝对 URL 之间进行转换。
如果使用的是相对 URL 就能在搬运一组文档的时候仍保持链接的有效性,就能实现在其他服务器上提供镜像内容之类的功能。
基础 URL
基础 URL 可以来自以下几个不同的地方。
解析相对引用
解析过程如下:
有些浏览器会在用户输入的时候尝试自动扩展URL。
这些“自动扩展”有以下两种方式。
与代理共同使用时,URL 自动扩展行为可能有所不同。
scheme | description |
---|---|
http | 超文本传输协议方案,没有user/password,port默认80 基本格式:http://host:port/path?query#frag |
https | 和 http 是一对,唯一区别在于 https 使用了网景的 SSL,SSL 为 HTTP 提供了端到端的加密机制。语法与 HTTP 一致,port默认443 |
mailto | 指向 E-mail 地址。 基本语法:mailto:joe@joes-hardware.com |
ftp | 文件传输协议。可以用来从 FTP 服务器上下载或上传文件,并获取 FTP 服务器上的目录结构内容的列表。 基本格式:ftp://user:password@host:port/path;param |
rtsp, rtspu | rtsp URL 是可以通过实时流传输协议解析的音/视频媒体资源的标识符。 rtspu 中的 u 表示它是使用 UDP 协议来获取资源的 基本格式:rtsp(u)://user:password@host:port/path |
file | 表示一台指定主机(通过本地磁盘、网络文件系统或其他一些文件共享系统)上可直接访问的文件。省略主机名则默认为本地主机。 基本格式:file://host/path |