HTTP(一)概述
资源
媒体类型
Web 服务器会为所有HTTP 对象数据附加一个MIME 类型。MIME 类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔。
- HTML 格式的文本文档由 text/html 类型来标记。
- 普通的 ASCII 文本文档由 text/plain 类型来标记。
- JPEG 格式的图片为 image/jpeg 类型。
- GIF 格式的图片为 image/gif 类型。
- Apple 的 QuickTime 电影为 video/quicktime 类型。
- 微软的 PowerPoint 演示文件为 application/vnd.ms-powerpoint 类型。
URI
每个Web 服务器资源都有一个名字,服务器资源名被称为统一资源标识符(Uniform Resource Identifier,URI)。URI 就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源。
URL
统一资源定位符是资源标识符最常见的形式,URL 描述了一台特定服务器上某资源的特定位置。它们可以明确说明如何从一个精确、固定的位置获取资源。
大部分URL 都遵循一种标准格式,这种格式包含三个部分。
-
URL 的第一部分被称为方案(scheme),说明了访问资源所使用的协议类型。这部分通常就是HTTP 协议(http://)。
- 第二部分给出了服务器的因特网地址(比如,www.joes-hardware.com)。
- 其余部分指定了 Web 服务器上的某个资源(比如,/specials/saw-blade.gif)。
现在,几乎所有的URI 都是URL。
URN
URI 的第二种形式就是统一资源名(URN)。
比如,不论因特网标准文档RFC 2141 位于何处(甚至可以将其复制到多个地方),都可以用下列URN 来命名它:
urn:ietf:rfc:2141
事务
一个HTTP 事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。这种通信是通过名为HTTP 报文(HTTP message)的格式化数据块进行的。
方法
HTTP 支持几种不同的请求命令,这些命令被称为HTTP 方法(HTTP method)。每条HTTP 请求报文都包含一个方法。这个方法会告诉服务器要执行什么动作。
状态码
每条HTTP 响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,告知客户端请求是否成功,或者是否需要采取其他动作。
报文
HTTP 报文是由一行一行的简单字符串组成的。
从Web 客户端发往Web 服务器的HTTP 报文称为请求报文(request message)。从服务器发往客户端的报文称为响应报文(response message)。
HTTP 报文包括以下三个部分。
- 起始行
报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。
- 首部字段
起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首部字段和添加新行一样简单。
- 主体
空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给Web 服务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含文本。
连接
HTTP 是个应用层协议。HTTP 无需操心网络通信的具体细节;它把联网的细节都 交给了通用、可靠的因特网传输协议 TCP/IP。
TCP提供了:
- 无差错的数据传输;
- 按序传输(数据总是会按照发送的顺序到达);
- 未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)。
因特网自身就是基于 TCP/IP 的,TCP/IP 是全世界的计算机和网络设备常用的层次 化分组交换网络协议集。TCP/IP 隐藏了各种网络和硬件的特点及弱点,使各种类型 的计算机和网络都能够进行可靠地通信。
只要建立了 TCP 连接,客户端和服务器之间的报文交换就不会丢失、不会被破坏, 也不会在接收时出现错序了。
连接、ip地址、端口号
HTTP 客户端向服务器发送报文之前,需要用网际协议(Internet Protocol,IP) 地址和端口号在客户端和服务器之间建立一条 TCP/IP 连接。
在 TCP 中,你需要知道服务器的 IP 地址,以及与服务器上运行的特定软件相关的 TCP 端口号。
我们来看几个 URL:
http://207.200.83.29:80/index.html http://www.netscape.com:80/index.html http://www.netscape.com/index.html
文本形式的域名,或者称为 主机名(www.netscape.com)。主机名就是 IP 地址比较人性化的别称。可以通过一 种称为域名服务(Domain Name Service,DNS)的机制方便地将主机名转换为 IP 地址,这样所有问题就都解决了。
HTTP 的 URL 中没有端口号时,可以假设默认端口号是 80。
web结构组件
代理
代理位于客户端和服务器之间,接收所有客户端的 HTTP 请求,并 将这些请求转发给服务器
缓存
Web 缓存(Web cache)或代理缓存(proxy cache)是一种特殊的 HTTP 代理服务 器,可以将经过代理传送的常用文档复制保存起来。
网关
网关(gateway)是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于 将 HTTP 流量转换成其他的协议。网关接受请求时就好像自己是资源的源端服务器 一样。客户端可能并不知道自己正在与一个网关进行通信。
隧道
隧道(tunnel)是建立起来之后,就会在两条连接之间对原始数据进行盲转发的 HTTP 应用程序。HTTP 隧道通常用来在一条或多条 HTTP 连接上转发非 HTTP 数 据,转发时不会窥探数据。
HTTP 隧道的一种常见用途是通过 HTTP 连接承载加密的安全套接字层(SSL, Secure Sockets Layer)流量,这样 SSL 流量就可以穿过只允许 Web 流量通过的防 火墙了。如图 1-14 所示,HTTP/SSL 隧道收到一条 HTTP 请求,要求建立一条到目 的地址和端口的输出连接,然后在 HTTP 信道上通过隧道传输加密的 SSL 流量,这 样就可以将其盲转发到目的服务器上去了。
Agent代理
用户 Agent 代理(或者简称为 Agent 代理)是代表用户发起 HTTP 请求的客户端程 序。所有发布 Web 请求的应用程序都是 HTTP Agent 代理。到目前为止,我们只提 到过一种 HTTP Agent 代理:Web 浏览器,但用户 Agent 代理还有很多其他类型。