首先URL的基本构成:
大多数URL语法是由下面这9个部分构成的:
[方案,用户,密码,主机,端口,路径,参数,查询,片段]
<scheme>://<user>:<password>@<host>:<port><path>;<params>?<query>#<frag>
URL组件的具体描述:
| 组件 | en | 描述 | 分隔 | 默认值 |
|---|---|---|---|---|
| 方案 | scheme | 使用哪种协议访问服务器资源 | : | 无 |
| 用户 | user | 某些方案访问资源需要用户名 | 匿名 | |
| 密码 | password | 通常与用户名配合使得 | 由冒号(:)连接 | <E-mail地址> |
| 主机 | host | 宿主服务器的域名或IP地址 | 无 | |
| 端口 | port | 宿主服务器正在监听的端口号(HTTP默认80,HTTPS默认443) | : | 每个方案特有 |
| 路径 | path | 服务器资源的本地名,由斜杠(/)分隔 | / | 无 |
| 参数 | params | 参数为键值对,某些方案会用这个组件来指定输入参数 | ; | 无 |
| 查询 | query | 用参数请求指定内容(如数据库,公告板,搜索引擎,网关) | ? | 无 |
| 片段 | frag | 请求资源的一小片或一部分资源 | # | 无 |
通过一个URL实例拆分:
这是Joe的五金商店的Web服务器上一个图片资源的URI
http://www.joes-hardware.com/specials/saw-blade.gif
对网址解析之后:
http:: 使用HTTP协议访问资源
www.joes-hardware.com: 告诉客户端服务器位于何处,进入服务器
/specials/saw-blade.gif: 资源路径,请求服务器上哪个特定的本地资源
附上 HTTP权威指南中对url的描述
HTTP权威指南 - WEB基础 - URL与资源
- 2.2.1方案——使用什么协议
方案实际上是规定如何访问指定资源的主要标识符,它会告诉负责解析URL
的应用程序应该使用什么协议。在我们这个简单的HTTPURL中所使用的方案就是 http。
方案组件必须以一个字母符号开始,由第一个":"符号将其与URL的其余部 分分隔开来。方案名是大小写无关的,因此URL :HITP://www.joes-hardware.com"是等价的。
- 2.2.2主机与端口
要想在因特网上找到资源,应用程序要知道是哪台机器装载了资源,以及在那台机器的什么地方可以找到能对目标资源进行访问的服务器。URL的主机和端 口组件提供了这两组信息。
主机组件标识了因特网上能够访问资源的宿主机器。可以用上述主机名 (www.joeshardware.com),或者IP地址来表示主机名。比如,下面两个URL就指向同_个资源一一第_个URL是通过主机名,第二个是通过IP地址指向服务 器的:
http://www.joes-hardware.com:8o/index.html
http://161.58.228.45: 80/index.html
端口组件标识了服务器正在监听的网络端口。对下层使用了 TCP协议的HTTP 来说,默认端口号为80。
- 2.2.3用户名和密码
更有趣的组件是用户和密码组件。很多服务器都要求输入用户名和密码才会允许用户访问数据◊ FTP服务器就是这样一个常见的实例。这里有几个例子:
ftp://ftp.prep.ai.mit.edu/pub/gnu
ftp://username@ftp.prep.ai.mit.edu/pub/gnu
ftp://u_name:my_pwd@ftp.prep.ai.mit.edu/pub/gnu
http://joe:joespasswd@www.joes-hardware.com/sales_info.txt
第一个例子没有用户或密码组件,只有标准的方案、主机路径。如果某应
用程序使用的URL方案要求输入用户名和密码,比如FTP,但用户没有提供,它
通常会插入一个默认的用户名和密码。比如,如果向浏览器提供一个FTPURL,
但没有指定用户名和密码,它就会插入anonymous (匿名用户)作为你的用户
名,并发送一个默认的密码(InternetExplorer会发送IEUser,Netscape
Navigator 则会发送 mozilla)。
第二个例子显示了一个指定为anonymous的用户名。这个用户名与主机组件
组合在一起,看起来就像E-mail地址一样◊字符将用户和密码组件与URL的
其余部分分隔开来。
在第三个例子中,指定了用户名(anonymous)和密码(my_passwd),两
者之间由字符":"分隔。
- 2.2.4路径
URL的路径组件说明了资源位于服务器的什么地方。路径通常很像一个分级
的文件系统路径。比如:
http://www.joes-hardwvare.com:8o/seasonal/index-fall.html
这个URL中的路径为/seasonal/index-fall.html,很像UNIX文件系统中的
文件系统路径。路径是服务器定位资源时所需的信息。 1可以用字符7”将
HTTPURL的路径组件划分成一些路径段( path segment)(还是与 UNIX文件系
统中的文件路径类似)。每个路径段都有自己的参数(param)组件。
1这是一种简化的说法。在18.2节我们会看到,路径并不总能为资源定位提供足够的信息。有时
服劳器还需要其他的信息。
- 2.2.5参数
对很多方案来说,只有简单的主机名和到达对象的路径是不够的。除了服务
器正在监听的端口,以及是否能够通过用户名和密码访问资源外,很多协议都还
需要更多的信息才能工作。
负责解析URL的应用程序需要这些协议参数来访问资源。否则,另一端的服
务器可能就不会为请求提供服务,或者更糟糕的是,提供措误的服务。比如,像
FTP&样的协议,有两种传输模式,二进制和文本形式。你肯定不希望以文本形
式来传送二进制图片,这样的话,二进制图片可能会变得一团糟。
为了向应用程序提供它们所需的输入参数,以便正确地与服务器进行交互,
URL中有一个参数组件。这个组件就是URL中的名值对列表,由字符“;”将其与
URL的其余部分(以及各名值对)分隔开来。它们为应用程序提供了访问资源所
需的所有附加信息。比如:
ftp: //prep.ai.mit.edu/pub/gnu;type=d
在这个例子中,有一个参数type=d,参数名为type,值为d。
如前所述,HTTPURL的路径组件可以分成若干路径段。每段都可以有自己的
参数。比如:
http: / /\N-ur\v.joeshardware.com/hammers;sale=false/index.htmI;graphics=true
这个例子就有两个路径段,hammers和index.html。hammers路径段有参
数 sale,其值为false。index.html段有参数 graphics,其值为 true。
- 2.2.6查询字符串
很多资源,比如数据库服务,都是可以通过提问題或进行查询来缩小所请求
资源类型范围的。
假设Joe的五金商店在数据库中维护着一个未售货物的清单,并可以对清单
进行查询,以判断产品是否有货,那就可以用下列URL*查询据库网关,
看看编号为12731的条目是否有货:
http://\vw\v.joes-hardware.com/inventory-check.cgi?item=i273i
这个URL的大部分都与我们见过的其他URL类似。只有问号(?)右边的内
容是新出现的。这部分被称为查询(query)组件。 URLft查询组件和标识网关资
源的URL5&径组件一起被发送给网关资源。基本上可以将网关当作访问其他应用
程序的访问点(第8章会对网关进行详细的讨论)。
图2-2中有一个作为Joe的五金商店清单查询应用程序的网关的服务器,在这
个例子中向此服务器发送了一个查询组件。查询的目的是检查清单中是否有尺寸
为large、颜色为blue的条目12731。

在本章稍后会看到,除了有些不合规则的字符需要特别处理之外,对查询组 件的格式没什么要求。按照常规,很多网关都希望查询字符串以一系列“名/值”对 的形式出现,名值对之间用字符分隔:
http://\vw\v.joes-hardware.com/inventory-check.cgi?item=i273i&
color=blue
在这个例子中,查询组件有两个名/值对:item=i273和color=blue。
- 2.2.7片段
有些资源类型,比如HTML,除了资源级之外,还可以做进一步的划分。比 如,对一个带有章节的大型文本文档来说,资源的URL会指向整个文本文档,但 理想的情況是,能够指定资源中的那些章节。
为了引用部分资源或资源的一个片段,URL支持使用片段(frag)组件来表示 一个资源内部的片段。比如,URL可以指向HTML文档中一个特定的图片或小节。
片段挂在URL的右手边,最前面有一个字符“#”。比如:
http://\nv\v.joes-hardware.com/tools.html#drills
在这个例子中,片段drills引用了 Joe的五金商店Web服务器上页面
/tools.html中的一个部分。这部分的名字叫做drills。
HTTP服务器通常只处理整个对象,2而不是对象的片段,客户端不能将片段传送给服务器(图2-3)。浏览器从服务器获得整个资源之后,会根据片段来显示你感兴趣的那部分资源。
2在15.9节会看到HTTPAgent代埋可能会请求某个字节范困内的对象,但在URL片段的上下文 中,服劳器会发送整个对象,由Agent代埋将片段标识符应用于资源。

本文详细解析了URL的九个组成部分:方案、用户、密码、主机、端口、路径、参数、查询和片段,以及它们在互联网资源定位中的作用。

821

被折叠的 条评论
为什么被折叠?



