HTTP协议:URL与资源

URI (Uniform Resource Identifier 统一资源标识符)是一类通用的资源标识符。它有2个子集:

  • URL (Uniform Resource Location 统一资源定位符):通过描述资源的位置来表示资源的。
  • URN (Uniform Resource Name 统一资源名称):通过名字来识别资源。
HTTP协议:URL与资源_第1张图片
URI.png

HTTP规范将更通用的概念 URI 作为其资源标识符。但实际上,HTTP应用程序处理的只是URI的子集URL。

URL

URL的第一部分是URL方案,第二部分是服务器的位置,第三部分是资源路径。

://:@:/;?#

URL也可以通过HTTP之外的其他协议来访问资源。它们可以指向因特网上的任意资源或者个人的E-mail账户。

组件 用户 确认值
方案 访问服务器获取资源时使用的协议
用户 centered 匿名
密码 are neat
主机 资源宿主服务器的主机名或IP地址
端口 资源宿主服务器正在监听的端口号 每个方案特有
路径 服务器上资源的本地名
参数
查询 are neat
片段 are neat
  • 方案-- 使用什么协议
    方案负责告诉负责解析URL的应用程序应该使用什么协议。方案名是大小写无关的,HTTP://www.baidu.com 和 http://www.baidu.com是等价的。
  • 主机与端口
    主机组件标识了因特网上能够访问资源的宿主机器
  • 用户名和密码
    很多服务器要求输入用户名和密码才会允许用户访问数据,特别是FTP服务器。
    ftp::ftp.prep.ai.mite.edu/pub/gnu
    ftp::[email protected]/pub/gnu
    ftp::anonymous:[email protected]/pub/gnu
    
    第一个例子没有用户名和密码,只有标准的方案,主机和路径。如果某些应用程序使用URL方案要求输入用户名和密码。比如FTP,但用户没有提供,它通常会插入一个默认的用户名和密码。
    第二个例子显示指定了一个anonymous用户名。
    第三个例子中,指定用户名和密码,两者之间由字符":"分隔。
  • 路径
    URL路径说明了资源位于服务器的什么地方。
  • 参数
    对于很多方案来说,只有简单的路径仍然不够。很多协议还需要其他更多的信息才能工作。比如,FTP协议有2种传输模式,二进制和文本形式。你肯定不会希望用文本形式传送图片。所以URL中有一个参数组件,这个组件就是URL中的名值对列表。由字符";"将其与URL的其余部分分隔开来
    ftp://prpe.ai.mit.edu/pub/gnu;type=d
    
    HTTP URL的路径组件可以分为若干路径段,每段都可以有自己的参数。
    http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true
    
  • 查询字符串
    http://www.joes-hardare.com/inventory-check.cgi?item=12731
    
  • 片段
    有些资源类型,比如HTML,除了资源以外,还可以做进一步划分。比如一个带有章节的大型文本,资源的URL可以指向整个文本外,还可以指向资源中的哪些章节。
    http://www.xxxx#xxx
    
    服务器通常只能处理整个对象,而不是对象的片段。浏览器从服务端获得整个资源后,会根据片段来显示你感兴趣的那部分资源。
URL快捷方式
相对URL

相对URL是不完整的。要从相对URL中获取访问资源所需的全部信息,就必须相对于另一个,被称为基础的URL进行解析。

hamers 

这个URL看起来是不完整的,但实际上是一个合法的URL。可以相对与它所在的文档的URL(基础URL)对其进行解释。

  • 解析相对引用
HTTP协议:URL与资源_第2张图片
解析相对引用
自动扩展URL

浏览器会在用户提交URL之后,会尝试自动扩展URL。这种扩展有2种方式:

  • 主机名扩展
    比如在地址栏中输入yahoo,浏览器会自动在主机名中插入www和.com。
  • 历史扩展
    浏览器将用户访问过的URL历史存储起来,当你开始输入URL时,它们可以将你输入URL与历史记录中的URL的前缀进行匹配。
URN

URL并不完美,它们表示的是实际的地址,而不是准确的名字。这种方案的缺点就是,如果资源被移走了,URL也就不再有效了。那时,它就无法对对象进行定位。

为了应对这个问题,提出了统一资源名(unifrom resource name, URN)的概念。无论对象被搬移到了什么地方(在一个Web服务器内或是不同的Web服务器),URN都能为对象提供一个稳定的名称。

永久统一资源定位符(persistent uniform resource locators, PURL)是用URL来实现URN思想的一个例子,其基本做法是在搜索资源的过程中引入一个中间层,通过一个中间资源定位符服务器对资源的实际URL进行登记和追踪。客户端可以向定位符请求一个永久URL,定位符可以以一个资源作为相应,将客户端重定向到资源当前实际URL上去。

参考资料
《HTTP权威指南》[美] David Gourley,Brian Totty,Marjorie Sayer,Sailu Reddy,Ansbu Aggarwal

你可能感兴趣的:(HTTP协议:URL与资源)