URL简介(上)

翻译 2017年01月03日 23:34:04

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,内容有改动。

详解URL的组成

很久很久以来,我对浏览器地址栏的信息了解的甚少,只知道域名(估计不知道是这么叫)。唉。。。真是很汗颜啊!在软件专业都混了两年了,还是个菜鸟。说真的,有的时候觉得计算机这个领域真的真的有太多的东西要学了...
  • ergouge
  • ergouge
  • 2012年11月15日 08:30
  • 35405

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Jfinal数据库操作API总结

使用Jfinal操纵数据库一般有2种模式 (1)Model (2)Db+Record 通过查看API,你会发现其实这2种模式在本质上是统一的。 第二种模式只是将对于数据库的操作分离到Db,对于...

tomcat7-maven-plugin 配置

org.apache.tomcat.maven tomcat7-maven-plugin 80...
  • zsg88
  • zsg88
  • 2017年04月08日 17:04
  • 745

MobLink网页跳转app指定界面技术简介之 URL Scheme

由于苹果的app都是在沙盒中,相互是不能访问数据的。但是苹果还是给出了一个可以在app之间跳转的方法:URL Scheme。简单的说,URL Scheme就是一个可以让app相互之间可以跳转的协议。每...
  • Mob_com
  • Mob_com
  • 2017年05月27日 13:05
  • 1653

php之curl(Client URL Library)简介

介绍由于最近应杰出那边的需求,要重新修改和宏业的API,所以不得不恶补一下curl的知识(以前只是大概了解了一下),现在和大家分享一下啦^-^。 我们先来认识下什么是cURL,可能还有很多同学没有听...

URL编程简介

一、URL类 url是用来描述如何在Internet上进行资源定位的字符串,一个完整的URL由协议、主机名、端口号、文件名、与引用组成。 例如:http://www.sina.com:80/news/...

url的三个js编码函数escape(),encodeURI(),encodeURIComponent()简介

转载地址:http://www.haorooms.com/post/js_escape_encodeURIComponent 引子 浏览器URl地址,上网一定会用到,但是浏览器地址有中...

iOS 内置URL schemes简介(1)

在IOS的应用中经常会看到一些应用程序通过某个点击动作而直接跳到App Store页面,开始很奇怪这种第三方应用于IOS的系统应用交互时怎么实现的。后来发现苹果的开发者文档中关于这种通信的实现是默认支...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:URL简介(上)
举报原因:
原因补充:

(最多只允许输入30个字)