[关闭]
@Dale-Lin 2019-07-30T15:43:18.000000Z 字数 3439 阅读 3063

HTTP URL和资源

HTTP


URI 包含 URL 和 URN。
URL 是以地址来标识资源的;URN 是以名字来标识资源的,与位置无关。

例如 URL http://www.joes-hardware.com/seasonal/index-fall.html 分为以下三部分:
1. URL 方案(scheme):可以告知 web 客户端怎样访问资源,本例http://说明使用 HTTP 协议。
2. 服务器地址:告知 web 客户端资源位于何处www.joes-hardware.com
3. 资源路径:说明请求的是服务器上哪个特定的本地资源/seasonal/index-fall.html

URL 可以通过其他协议来访问资源:

URL 最重要的3部分是方案(scheme)、主机(host)和路径(path)。

大多数 URL 方案的语法都建立在由9部分构成的通用格式上:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
几乎没有 URL 用到了所有的组件。

组件 描述 默认值
scheme 访问服务器以获取资源时要使用哪种协议
user 访问时的用户名 匿名
password 用户名后面可能要包含的密码,中间由 : 分隔 E-mail地址
host 资源宿主服务器的主机名或点分ip地址
端口 宿主服务器正在监听的端口号(HTTP默认端口号为80) 每个方案特有
path 服务器上资源的本地名,以 / 分隔
param 参数 名值对,可以包含多个,相互之间以 ; 分隔
query 查询 某些方案会用这个组件传递参数以激活应用程序(数据库、公告板、搜索引擎以及其他因特网网关)。用 ? 和其他取件分隔
片段 一小片资源的名字,引用对象时,不会传递给服务器,是在客户端内部使用的。通过 # 分隔

scheme

scheme 由“:”与其他 URL 组件分隔,大小写无关。

host:port

分别提供 主机地址 : 主机上能访问目标资源的服务器
主机地址可以使用主机名(www.joes-hardware.com),或者 IP 地址(161.58.228.45)表示。
端口标识了服务器正在监听的网络端口。对下层使用了 TCP 协议的 HTTP 来说,默认端口号为 80。
对于 HTTPS 来说,默认端口号是 443.

user:password

很多服务器要求输入用户名和密码才允许访问数据,例如FTP:

如果访问 FTP 地址时没有指定用户名和密码,会插入 anonymous 作为用户名,并发送一个默认密码(IE 发送 IEUser)

path

path 指定了目标资源位于服务器的什么地方。通常像一个分级的文件系统路径(/seasonal/index-fall.html)

可以用 / 将HTTP URL的路径组件划分为一些路径段(path segment)。每个路径段都有自己的参数(param)组件。

param 参数

负责解析 URL 的应用程序需要访问协议的参数来访问资源,否则服务器可能无法提供服务甚至错误服务。

参数组件是 URL 中的名值对列表,由 ; 将其与 URL 的其余部分(以及各名值对)分隔开,例如:
ftp://prep.ai.mit.edu/pub/gnu;type=d

多个路径段时每个都可以有自己的参数组件:
http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true

query 查询字符串

很多资源(如数据库服务)都可以通过查询来缩小请求资源类型范围,通过 & 并列。
例如:
http://www.joes-hardware.com/inventory-check.cgi?item=12731
? 右边是一个查询组件,查询 Web 数据库网管编号为12731的条目是否有货。
例如:
http://www.joes-hardware.com/inventory-check.cgi?item-12731&color=blue&size=large
查询是否有尺寸为large、颜色为blue的条目12731.

frag 片段

使用 # 加上 frag 组件来指向一个资源内部的片段,例如:
http://www.joes-hardware.com/tools.html#drills
HTTP服务器通常处理的是整个对象,而不是片段,客户端也不能发送片段给服务器。所以浏览器从服务器获取整个资源后,会根据片段来显示指定部分的资源。


URL快捷方式

相对URL

相对 URL 是不完整的,相对于另一个基础(base) URL 进行解析。
处理相对 URL 的应用程序(例如浏览器)要能在相对和绝对 URL 之间进行转换。
如果使用的是相对 URL 就能在搬运一组文档的时候仍保持链接的有效性,就能实现在其他服务器上提供镜像内容之类的功能。

  1. 基础 URL
    基础 URL 可以来自以下几个不同的地方。

    • 在资源中显式地指定。
    • 封装资源的基础 URL(所属资源的 URL 作为基础)。
    • 没有基础 URL 的情况下,较大可能是一个不完整或损坏的 URL 。
  2. 解析相对引用
    解析过程如下:

Created with Raphaël 2.1.2已解析好的相对URL:{scheme=x, user=y,...}所有组件为空?默认为基础 URLScheme?Absolute URL继承基础 URL 的方案,检查user/password/host/port所有组件为空?继承基础URL的user/password/host/port,检查path路径为空?继承基础URL路径,检查param参数为空?继承基础URL参数,检查query查询为空?继承基础URL查询将继承的组件和相对组件结合成新的绝对URL带有前导“/”的非空路径?从在处理的路径中删除“./”和“/./”yesnoyesnoyesnoyesnoyesnoyesnoyesno

自动扩展URL

有些浏览器会在用户输入的时候尝试自动扩展URL。
这些“自动扩展”有以下两种方式。

与代理共同使用时,URL 自动扩展行为可能有所不同。


Scheme

scheme description
http 超文本传输协议方案,没有user/password,port默认80
基本格式:http://host:port/path?query#frag
https 和 http 是一对,唯一区别在于 https 使用了网景的 SSL,SSL 为 HTTP 提供了端到端的加密机制。语法与 HTTP 一致,port默认443
mailto 指向 E-mail 地址。
基本语法:mailto:joe@joes-hardware.com
ftp 文件传输协议。可以用来从 FTP 服务器上下载或上传文件,并获取 FTP 服务器上的目录结构内容的列表。
基本格式:ftp://user:password@host:port/path;param
rtsp, rtspu rtsp URL 是可以通过实时流传输协议解析的音/视频媒体资源的标识符。
rtspu 中的 u 表示它是使用 UDP 协议来获取资源的
基本格式:rtsp(u)://user:password@host:port/path
file 表示一台指定主机(通过本地磁盘、网络文件系统或其他一些文件共享系统)上可直接访问的文件。省略主机名则默认为本地主机。
基本格式:file://host/path

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注