HTTP--资源与URI

这是我阅读《HTTP权威指南》的总结和思考中,一系列文章的一篇,目录在这里

什么是资源

Web是由资源(Web resource)构成的,资源存放在服务器(Web Server)中,包含:

  1. 文件: 包括了各式各样的静态文件,HTML、CSS、JavaScript、图片、音乐、视频
  2. 网关: 网关是特殊的服务器,作为中间实体生成或者从其他位置请求资源,包括了各种动态生成返回的服务,例如股票信息等

URI

URI(Uniform Resource Identifier)指一个字符串用于标示某一个互联网资源,类似于资源的身份证

URI包括了URL(占绝大多数)和URI(未来趋势)

URL

定义

URL(Uniform Resource Locator)指的是通过位置相关信息来对一个互联网资源进行标示,当资源(文件)移动位置,就会失去效果

语法

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

一般的URL包含了最重要的3个部分,scheme、host和path

也有特殊的URL,比如mailto:wmcs@xxx.cn不符合该规则

path后面的params、query、frag由web的开发者利用

相对URL

关于相对URL的具体解析算法在36页,总的来说算法如下:

  1. scheme为空说明是相对URL,否则为绝对URL
  2. 相对URL继承基础URL(当前环境)的host,user,password,schemeport
  3. 前导为./我理解为是相对当前资源进行跳转, 例如 http://www.a.com/b/c/d.html中,点击./e.html会跳转到http://www.a.com/b/c/e.html
  4. 前导为/我理解是基于根domain跳转,例如3中的例子点击/e.html会跳转到http://www.a.com/e.html

URL字符集

URL仅允许使用ASCII的一个子集,非这个集合内的字符都需要转移,通过一个百分号加十六进制ASCII码完成

例如空格在URL中为%20。

包括. ? # %都具有特殊用途,全部表参考书中39页

URN

URL具有一个显著的缺点: 当资源移动后,我们无法根据位置来找到他们。人们希望设计一个与位置无关的,永久存在的标记命名一个资源。能够随时随地获取

URN就是这样思想下的产物,一个资源具有一个始终稳定的名称。但是因为其实现难度(需要对资源登记,追踪,解析URN)始终没有推广与标准化

PURL(persistent URL)是这个思想的一种URL实现,将URL登记在一个中间层中,当URL改变,更新中间层的缓存,从而始终用一个URL从中间层访问资源,例如:

1
2
3
4
对于资源A的URL http://www.hardware.com
可以注册到中间层 http://purl.org/shop
当资源A改变URL到 http://www.software.com 时,通知中间层
我们依然可以用 http://purl.org/shop 访问该资源