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
- 第一个例子并没有用户和密码组件,只有方案、主机、路径。
- 第二个例子指定了
anonymous
为用户名。 - 第三个例子指定了
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
这个例子有两个路径段,hammers
和index.html
,hammers
路径段有参数sale
,值为false
,index.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 进行解析,以获取访问资源所需的全部信息。
为保持一组资源的可移植性提供了便捷。
- 基础URL
- 在资源中显式提供
- 封装资源的基础URL
- 没有基础URL
- 解析相对引用
自动扩展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。 |
mailto | Mailto URL 指向的是 E-mail 地址。 |
ftp | 文件传输协议 URL 可以用来从 FTP 服务器上下载或向其上载文件, 并获取 FTP 服务器 上的目录结构内容的列表。 |
rtsp,rtspu | RTSP URL 是可以通过实时流传输协议(Real Time Streaming Protocol)解析的音 / 视频 媒体资源的标识符。方案 rtspu 中的 u 表示它是使用 UDP 协议来获取资源的。 |
file | 方案 file 表示一台指定主机上可直接访问的文件。 |
news | 根据 RFC 1036 的定义, 方案 news 用来访问一些特定的文章或新闻组。 |
telnet | 用于访问交互式业务。它表示的并不是对象自身,而是可通过 telnet 协议访问的交互式应用程序(资源)。 |
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.