URL简介(上)

4 篇文章 0 订阅

URLUniform Resource Locator,统一资源定位符),作为网络资源的标准名称,使用一系列的信息标识来帮助我们定位网络资源,同时也告诉我们如何来获取资源。

实际上,URLURIUniform Resource Identifier,统一资源标识符)的子集,URI作为一个基本概念,由两部分组成,URLURNUniform Resource Name)。URL通过描述资源的位置来定位资源,而URN通过名字来查找资源,而不管资源是否被迁移了。

HTTP协议中使用URI来进行资源定位,但是应用程序中实际上只使用URL子集。

例如我们想要访下面的URL

http://www.joes-hardware.com/seasonal/index-fall.html:

· URL前面的httpURL的方案(scheme),URL的方案告诉网络客户端应该如何获取这个资源,在这个例子中,URL告诉客户端使用HTTP协议来获取这个资源。

· 第二部分“www.joes-hardware.com”为服务器地址,这个信息告诉客户端到哪儿去获取这个资源。

· 最后一部分“seasonal/index-fall.html”为资源路径,资源路径标明了资源在服务器上的本地路径。

下面这张图说明了整个解析过程:

【原创】URL简介 - 远行的风 - 风的驿站

除了使用HTTP协议来获取资源,我们还可以使用其他的协议来获取互联网的资源,例如:

mailto:president@whitehouse.gov

ftp://ftp.lots-o-books.com/pub/complete-price-list.xls

file:///c:/WINDOWS/somedata.dat

rtsp://www.joes-hardware.com:554/interview/cto_video

git://github.com/user/project-name.git

ed2k://|file|%5BMAC%E7%89%88%E6%9E…

URL定义了一种命名资源的统一方式,大多数的URL都具有“scheme://server location/path”的格式,因此,对于各种不同地方的资源,无论我们获取资源的方式有何不同,命名资源的方式始终是唯一的,任何人通过这个名字都能找到这个资源。

网络资源多种多样,URL的方案也各不相同,但是他们大多都遵循统一的URL语法,下面列出了组成URL的通用的9个部分,大多数URL都符合下面的定义:

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

当然,上面列出的是只是理论上的组成部分,实际当中,几乎没有URL包含上面的所有部分,URL中重要的三个部分是schemehostpath,下表列出了每个组成部分的简要说明:

组成部分

描述

默认值

scheme

定义了使用哪种协议来获取资源

无默认值

user

获取资源需要的用户名

匿名

password

获取资源的密码,紧跟用户名,中间以冒号“:”分隔

<Email address>

host

资源服务器的主机名或者IP地址

无默认值

port

资源服务器侦听的端口,很多scheme类型都有自己默认的端口(例如HTTP协议用80端口)

默认值因scheme而异

path

服务器上的资源的本地路径,通过斜线“/”与前面的URL部分分隔开

无默认值

params

某些scheme中使用这个组成部分来传递输入参数,参数以键值对儿的形式出现,一个URL中可以出现多个参数,彼此之间以分号“;”分隔

无默认值

query

某些scheme中使用query来向某些应用传参(例如数据库、公告板、搜索引擎等等),对于这部分没有特定的格式,query使用问号“?”与URL其他部分分隔开

无默认值

frag

资源的某个部分的名称,在向服务器发请求时,并不会发送frag部分,仅在客户端内部使用,frag使用井号“#”与URL其他部分分隔开

无默认值

http://www.joes-hardware.com:80/index.html为例,方案(scheme)为httphostwww.joes-hardware.comport80path/index.html

下面具体来说明。

· 方案(scheme):决定了获取资源所使用的方式,它告诉应用程序应该以哪种协议来解析URL,方案必须由字母开头,通过冒号“:”与URL其他部分分隔开。方案名不区分大小写,所以HTTPhttp效果相同。

· 主机名(host)和端口(port):用来指示在网络中哪一个主机拥有该资源,并且从哪一个端口进入能够访问到资源。host既可以是主机名(例如www.joes-hardware.com)也可以是IP地址,端口号则表明了服务器通过哪一个端口侦听请求。

· 用户名(username)和密码(password):在访问资源前,很多服务器需要客户端提供一个具有访问权限的用户名和密码,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

第一个例子并没有提供用户名和密码,这时候会使用默认的用户名和密码来访问,例如上面的第一个FTP的例子,会使用“anonymous”作为用户名,默认密码则因浏览器不同而有所差异。

第二个例子提供用户名为anonymous作为用户名,密码默认,用户名和密码使用“@”符号与URL的其他部分分隔开。

· 路径(path):指明了资源在服务器上的具体位置,路径通常是分层的文件路径。服务器使用路径来找到具体的资源,路径使用“/”来分段,对于每一段都可以指定参数部分(params)。

· 参数(params):对于很多方案,仅仅提供主机名和路径是不够的,例如FTP使用两种方式传输文件:二进制(binary)和纯文本(text),如果不通过指定参数来区分的话,就无法得到正确的资源格式。URL中的参数为键值对儿,通过分号来分隔,用来提供额外的信息,例如:

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

其中type=d是唯一的参数。

我们前面提到了,路径的每一段都可以指定参数,下面就是一个例子:

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

· 查询字符串(querystring):有些资源,例如数据库资源,可以通过查询字符串来缩小查询范围,比如:

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

通过请求字符串来返回id12731item

对于查询字符串来说没有格式上的要求,但是有些字符不能出现,需要进行转义,并且按照惯例来说,查询字符串通常由一系列的“name=value”组成,中间由“&”符号进行连接。

· 对于某些资源类型,例如HTTP资源,可以对资源进一步细分,例如一个大的文本可以细分为段落,通过URL可以找到改文本资源,但是更理想的是,可以精确到每一段。

例如下面的例子:

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

用来获取tools.html上名为“drills”的部分。由于HTTP服务器通常只处理整个资源,因此浏览器实际上并不会将frag发送给服务器,当从服务器返回整个资源后,浏览器根据frag部分对结果进行筛选展示。

 

摘译自《HTTP-The Definitive Guide by David Gourley & Brian Totty,内容有改动。

  • 86
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值