URL 与资源

URL 就是因特网资源的标准化名称。URL 指向一条电子信息片段,告诉你它们位于何处,以及如何与之交互。

浏览因特网资源

URI 是一个更通用的概念,由两个主要的子集 URL 和 URN 构成,URL 是通过描述资源的位置来标识资源,URN 是通过名字来标识资源,与资源的位置无关。

HTTP 规范将更通用的概念 URI作为其资源标示符,但实际上,HTTP 应用程序处理的只是 URI 的子集 URL。

URL 由三部分构成:方案(协议)、服务器位置、资源路径。

URL 为应用程序提供了一种访问资源的手段。定义了用户所需的资源以及如何获取它。

URL的语法

根据方案的不同,URL 语法会随之变化,但大部分都建立在由 9 部分构成的同样格式上:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

几乎没有哪个 URL 完整包含了这 9 部分,其中最主要的就是方案、主机、路径。

通用 URL 组件总结:

组件描述默认值
方案访问服务器以获取资源时要使用哪种协议
用户某些方案访问资源时需要的用户名匿名
密码用户名后面可能要包含的密码,中间由冒号(:)分割<E-mail 地址>
主机资源宿主服务器的主机名或点分IP地址
端口资源宿主服务器正在监听的端口号。很多方案有默认的端口号,比如HTTP为80每个方案特有
路径服务器上资源的本地名,由一个斜杠(/)将其与前面的URL组件分割
参数某些方案会使用这个组件来指定输入参数,参数为名/值对,URL 中可以包含多个参数字段,它们相互之间以及与路径 的其余部分之间用分号(;)分隔
查询某些方案会用这个组件传递参数以激活应用程序,查询组 件的内容没有通用格式。 用字符“?”将其与 URL 的其余 部分分隔开来
片段一小片或一部分资源的名字,引用对象时, 不会将 frag 字 段传送给服务器;这个字段是在客户端内部使用的。 通过 字符“#”将其与 URL 的其余部分分隔开来

方案 - 使用什么协议

方案是规定如何访问指定资源的主要标识符,告诉负责解析 URL 的应用程序使用什么协议。

方案组件必须以一个字母符号开始,由第一个冒号(:)与 URL 的其他部分分割。大小写无关。

主机与端口

主机组件标识了因特网上能够访问资源的宿主机器。 端口组件标识了服务器正在监听的网络端口。

用户名和密码

有些服务器需要输入用户名和密码才能访问资源,比如 FTP。

ftp://ftp.prep.ai.mit.edu/pub/gnu 
ftp://anonymous@ftp.prep.ai.mit.edu/pub/gnu 
ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu 
http://joe:joespasswd@www.joes-hardware.com/sales_info.txt
  1. 第一个例子并没有用户和密码组件,只有方案、主机、路径。
  2. 第二个例子指定了anonymous为用户名。
  3. 第三个例子指定了anonymous为用户,my_passwd为密码,中间用冒号(:)分割。

路径

说明了资源位于服务器的什么地方,通常像一个分级的文件系统路径,是服务器定位资源时所需的信息。

参数

参数组件,向应用程序提供它们所需的输入参数,以便正确的与服务器进行交互。为应用程序提供了访问资源所需的所有附加信息。

ftp://prep.ai.mit.edu/pub/gnu;type=d

这个例子中,有一个参数type=d,参数名为type,值为d

HTTP URL 的路径可以分成若干路径段,每段都可以有自己的参数:

http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true

这个例子有两个路径段,hammersindex.htmlhammers路径段有参数sale,值为falseindex.html路径段有参数graphics,值为true

查询字符串

URL 的查询组件和标识网关资源的 URL 路径组件一起被发送给网关资源。由问号(?)与其他组件分割,由一系列“名/值”对构成,个“名/值”对使用&分割。

http://www.joes-hardware.com/inventory-check.cgi?item=12731&color=blue

片段

有些资源,比如 HTML,除了资源级别的划分,还可以更进一步的进行划分。为了引用部分资源或资源的一个片段,URL 支持使用片段组件来表示一个资源内部的片段。

片段挂在 URL 的最右边,使用#与其他组件分割:

http://www.joes-hardware.com/tools.html#drills

即引用资源tools.html的一部分,这部分的名字为drills

HTTP 服务器只处理整个对象,而不是对象的片段,客户端不能将片段传送给服务器。浏览器从服务器获得了整个片段之后,会根据片段来显示你感兴趣的那部分资源。

URL快捷方式

相对URL

URL 有两种方式:绝对、相对。

绝对 URL 中包含有访问资源所需的全部信息。相对 URL 必须根据基础 URL 进行解析,以获取访问资源所需的全部信息。

为保持一组资源的可移植性提供了便捷。

  1. 基础URL
    1. 在资源中显式提供
    2. 封装资源的基础URL
    3. 没有基础URL
  2. 解析相对引用

自动扩展URL

有些浏览器会在用户提交 URL 之后,或者在用户输入的时候尝试自动扩展 URL,以为用户提供便利。

  • 主机名扩展
  • 历史扩展

各种令人头疼的字符

URL字符集

URL 的设计者将转义序列集成到 US-ASCII 字符集,以实现可移植性和完整性。

编码机制

为了避开安全字符集表示法带来的限制,通过一种“转义”表示法来表示不安全的字符,这种转义表示法包含一个百分号(%),后跟两个表示字符 ASCII 码的十六进制数,以此来表示不安全的字符。

比如:

字符ASCII码示例URL
~126(0x7E)http://www.joes-hardware.com/%7Ejoe
空格32(0x20)http://www.joes-hardware.com/more%20tools.html
%37(0x25)http://www.joes-hardware.com/100%25satisfaction.html

字符限制

在 URL 中存在一些保留字符具有特殊含义。

这些字符有:%/...#?;:$,+@ & ={}|\^~[]<>"0x00-0x1F, 0x7F>0x7F

方案

方案描述
http超文本传输协议方案,除了没有用户名和密码之外, 与通用的URL格式相符。端口默认为 80。
https方案 https 与方案 http 是一对。 唯一的区别在于方案 https 使用了网景的 SSL,SSL 为 HTTP 连接提供了端到端的加密机制。其语法与 HTTP 的语法相同,默认端口为 443。
mailtoMailto URL 指向的是 E-mail 地址。
ftp文件传输协议 URL 可以用来从 FTP 服务器上下载或向其上载文件, 并获取 FTP 服务器 上的目录结构内容的列表。
rtsp,rtspuRTSP URL 是可以通过实时流传输协议(Real Time Streaming Protocol)解析的音 / 视频 媒体资源的标识符。方案 rtspu 中的 u 表示它是使用 UDP 协议来获取资源的。
file方案 file 表示一台指定主机上可直接访问的文件。
news根据 RFC 1036 的定义, 方案 news 用来访问一些特定的文章或新闻组。
telnet用于访问交互式业务。它表示的并不是对象自身,而是可通过 telnet 协议访问的交互式应用程序(资源)。