[关闭]
@guoxs 2015-09-26T11:50:11.000000Z 字数 4973 阅读 2205

URL与资源

HTTP


1、URL的语法

大多数URL方案的URL语法都建立在这个由9部分构成的通用格式上:

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

 通用URL组件:

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

。URL 最重要的3 个部分是方案(scheme)、主机(host)和路径(path)。

1.1 方案

方案组件必须以一个字母符号开始,由第一个“:”符号将其与URL 的其余部分分隔开来。方案名是大小写无关的

1.2 主机和端口

主机组件标识了因特网上能够访问资源的宿主机器。可以用上述主机名(www.joeshardware.com),或者IP 地址来表示主机名。
端口组件标识了服务器正在监听的网络端口。对下层使用了TCP 协议的HTTP 来说,默认端口号为80。

1.3 用户名与密码

例如:
ftp://ftp.prep.ai.mit.edu/pub/gnu:无用户或密码组件,只有标准的方案、主机和路径。

ftp://anonymous@ftp.prep.ai.mit.edu/pub/gnu:
没有指定用户名和密码,它就会插入anonymous(匿名用户)作为你的用户名,并发送一个默认的密码(Internet Explorer 会发送IEUser,Netscape Navigator 则会发送mozilla)。字符“@”将用户和密码组件与URL 的其余部分分隔开来。

ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu:,指定了用户名(anonymous)和密码(my_passwd),两者之间由
字符“:”分隔。

1.4 路径

URL 的路径组件说明了资源位于服务器的什么地方。路径通常很像一个分级的文件系统路径。
可以用字符 / 将HTTPURL的路径组件划分成一些路径段(path segment)(与UNIX文件系统中的文件路径类似)。每个路径段都有自己的参数(param)组件。

1.5 参数

负责解析URL的应用程序需要协议的参数来访问资源。否则,另一端的服务器可能就不会为请求提供服务或者提供错误的服务。

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

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

1.6 查询字符串

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

? 号后是查询语句,很多网关都希望查询字符串以一系列“名/ 值”对的形式出现,名值对之间用字符“&”分隔。

2.7 片段

URL 支持使用片段(frag)组件来表示一个资源内部的片段。比如,URL可以指向HTML文档中一个特定的图片或小节。
片段挂在URL 的右手边,最前面有一个字符 #

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

HTTP 服务器通常只处理整个对象,而不是对象的片段,客户端不能将片段传送给服务器。浏览器从服务器获得了整个资源之后,会根据片段来显示你感兴趣的那部分资源。
一个在前端重构比较有用的运用就是页面内锚点

2、URL快捷方式

2.1 相对URL

URL 有两种方式:绝对的相对的。目前只有相对的URL,绝对URL中包含有访问资源所需的全部信息。
相对URL是不完整的,要从相对URL中获取访问资源所需的全部信息,就必须相对于另一个,被称为其基础(base)的URL进行解析。
在前端中的./../ 等。

基础URL
可以来自以下几个地方:
- 在资源中显式提供
- 封装资源的基础 URL
- 没有基础 URL
URL base
解析相对引用
分解算法

这个算法将一个相对URL转换成了其绝对模式,之后就可以用它来引用资源了。这个算法最初是在RFC 1808 中制定的,后来被合并到了RFC 2396 中。

2.2 自动扩展URL

2.2.1 主机名扩展

在主机名扩展中,只要有些小提示,浏览器通常就可以在没有帮助的情况下,将你输入的主机名扩展为完整的主机名。
主机名扩展技巧可能会为其他一些HTTP应用程序带来问题,比如代理。

2.2.2 历史扩展

将以前用户访问过的URL历史存储起来。当用户再次输入URL 时,就可以将输入的URL与历史记录中URL的前缀进行匹配,并提供一些完整的选项以供选择。

3、URL中的字符

为了避开安全字符集表示法带来的限制,人们设计了一种编码机制,用来在URL中表示各种不安全的字符。这种编码机制就是通过一种“转义”表示法来表示不安全字符的,这种转义表示法包含一个百分号(%),后面跟着两个表示字符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 中,有几个字符被保留起来,有着特殊的含义。有些字符不在定义的USASCII可打印字符集中。还有些字符会与某些因特网网关和协议产生混淆,因此不
赞成使用。

字 符 保留/受限
% 保留作为编码字符的转义标志
/ 保留作为路径组件中分隔路径段的定界符
. 保留在路径组件中使用
.. 保留在路径组件中使用
# 保留作为分段定界符使用
? 保留作为查询字符串定界符使用
; 保留作为参数定界符使用
: 保留作为方案、用户/ 口令,以及主机/ 端口组件的定界符使用
$, + 保留
@ & = 在某些方案的上下文中有特殊的含义,保留
{ } \ ^ ~ [ ] '
< > " 不安全;这些字符在URL范围之外通常是有意义的,比如在文档中对URL自身进行定界(比如http://www.joes-hardware.com),所以应该对其进行编码0x00-0x1F,0x7F受限,这些十六进制范围内的字符都在US-ASCII 字符集的不可打印区间内>0x7F受限,十六进制值在此范围内的字符都不在US-ASCII 字符集的7 比特范围内

4、方案

HTTP: 超文本传输协议方案,除了没有用户名和密码之外,与通用的URL格式相符。如果省略了端口,就默认为80。

  1. 基本格式:
  2. http://<host>:<port>/<path>?<query>#<frag>

HTTPS: 方案https与方案http是一对。唯一的区别在于方案https 使用了网景的SSL,SSL为HTTP连接提供了端到端的加密机制。其语法与HTTP的语法相同,默认端口为443。

  1. 基本格式:
  2. https://<host>:<port>/<path>?<query>#<frag>

mailto: Mailto URL指向的是E-mail地址。由于E-mail的行为与其他方案都有所不同(它并不指向任何可以直接访问的对象),所以mailto URL的格式与标准URL的格式也有所不同。因特网E-mail 地址的语法记录在RFC 822 中。

  1. 基本格式:
  2. mailto:<RFC-822-addr-spec>

ftp: 文件传输协议URL可以用来从FTP服务器上下载或向其上载文件,并获取FTP服务器上的目录结构内容的列表。在Web 和URL 出现之前FTP就已经存在了。Web 应用程序将FTP作为一种数据访问方案使用。URL语法遵循下列通用格式。

  1. 基本格式:
  2. ftp://<user>:<password>@<host>:<port>/<path>;<params>

rtsp,rtspu: RTSP URL是可以通过实时流传输协议(Real Time Streaming Protocol)解析的音/视频媒体资源的标识符。方案rtspu中的u表示它是使用UDP协议来获取资源的。

  1. 基本格式:
  2. rtsp://<user>:<password>@<host>:<port>/<path>
  3. rtspu://<user>:<password>@<host>:<port>/<path>

UDP 是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

file: 方案file表示一台指定主机(通过本地磁盘、网络文件系统或其他一些文件共享系统)上可直接访问的文件。各字段都遵循通用格式。如果省略了主机名,就默认为正在使用URL 的本地主机。

  1. 基本格式:
  2. file://<host>/<path>

news: 方案news用来访问一些特定的文章或新闻组。它有一个很独特的性质:news URL自身包含的信息不足以对资源进行定位
news URL 中缺乏到何处获取资源的信息——没有提供主机名或机器名称。从用户那里获取此类信息是解释程序的工作。比如,在网景浏览器的“选项”(Options)菜单中,就可以指定自己的NNTP(news)服务器。这样,浏览器有了news URL的时候就知道应该使用哪个服务器了。新闻资源可以从多台服务器中获得。它们被称为位置无关的,因为对它们的访问不依赖于任何一个源服务器。
news URL 中保留了字符“@”,用来区分指向新闻组的news URL 和指向特定新闻文章的news URL。

  1. 基本格式:
  2. news:<newsgroup>
  3. news:<news-article-id>

telnet: 方案telnet用于访问交互式业务。它表示的并不是对象自身,而是可通过telnet协议访问的交互式应用程序(资源)。

  1. 基本格式:
  2. telnet://<user>:<password>@<host>:<port>/

5、URL与URN

URL无法根据资源名定位资源,如果资源被移走,则无法找到资源。为了应对这种问题,因特网工程任务组(Internet Engineering Task Force,IETF)已经对一种名为统一资源名(uniform resource name,URN)的新标准做了一段时间的研究了。无论对象搬移到什么地方(在一个Web服务器内或是在不同的Web服务器间),URN都能为对象提供一个稳定的名称。

永久统一资源定位符(PURL):persistent uniform resource locators,其基本思想是在搜索资源的过程中引入另一个中间层,通过一个中间资源定位符(resource locator)服务器对资源的实际URL进行登记和跟踪。客户端可以向定位符请求一个永久URL,定位符可以以一个资源作为响应,将客户端重定向到资源当前实际的URL上去。
PURL
更多有关PURL的知识可参考:http://purl.oclc.org

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注