HTTP概述
2017-05-01 本文已影响156人
唐紫依
参考资料
- 《HTTP 权威指南》
引言
本篇简要介绍 HTTP 协议的一些概念,后续详细补充。
一、HTTP——因特网的多媒体信使
- HTTP(HyperText Transfer Protocol)超文本传输协议,在因特网上,JPEG 图片,HTML 文件,文本文件,MPEG 电影,WAV 音频文件,Java 小程序等超文本便是通过 HTTP 协议进行传输的。
- HTTP 使用的是可靠的数据传输协议,因此即使数据来自地球的另一端,它也能够确保数据在传输的过程中不会被损坏或产生混乱。
二、WEB 客户端和服务器
-
我们的 Web 资源就是存放在 Web 服务器上的,Web 客户端一般指浏览器,二者便是通过 HTTP 协议进行数据传输的。
Web 客户端和服务器
三、资源
- Web 服务器是 Web 资源的宿主。Web 资源是 Web 内容的源头。最简单的 Web 资源就是 Web 服务器文件系统中的静态文件。这些文件可以包含任意内容,比如
.txt
,.html
,.word
格式的文件。 - 资源也可以是根据需要生成内容的软件程序。这些动态内容可以根据你的身份、所请求的信息或每天的不同时段来产生内容。
3.1 媒体类型
- 因特网上有数千种不同的数据类型,HTTP 仔细地给每种要通过 Web 传输的对象都打上了名为 MIME 类型的数据格式标签。MIME 类型是一种文本标记,表示一种主要的对象类型和特定的子类型,中间有一条斜杠来分隔。以下是一些常见的文本类型的例子:
- HTML 格式的文本文档由
text/html
类型来标记
- 普通的 ASCII 文本文档由
text/plain
类型来标记 - JPEG 格式的图片为
image/jpeg
类型 - GIF 格式的图片为
image/gif
类型
3.2 URI
- 服务器资源名被称为 统一资源标识符(Uniform Resource Identifier,URI),URI 就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源。URI 有两种形式,分别称为 URL 和 URN,前者运用比较广泛。
3.3 URL
- 统一资源定位符(URL)是资源标识符最常见的形式。URL 描述了一台特定服务器上某资源的特定位置。它们可以明确说明如何从一个精确、固定的位置获取资源。
- 大部分 URL 都遵循一种标准格式,这种格式包含三个部分:
- URL 的第一部分被称为方案,说明了访问资源所使用的协议类型。这部分通常就是 HTTP 协议(
http://
) - 第二部分给出了服务器的因特网地址(比如
www.baidu.com
) - 其余部分指定了 Web 服务器上的某个资源(比如
/specials/source.jpg
)
3.4 URN
- URI 的第二种形式就是统一资源名(URN)。URN 是作为特定内容的唯一名称所使用的,与目前的资源所在地无关。使用这些与位置无关的 URN,就可以将资源四处搬移。通过 URN,还可以用同一个名字通过多种网络访问协议来访问资源。
四、事务
- 一个 HTTP 事务由一条(从客户端发往服务器)请求命令和一个(从服务器发回客户端)响应结果组成。这种通信是通过名为 HTTP 报文(HTTP message)的格式化数据块进行的,如下图所示:
4.1 方法
- HTTP 支持集中不同的请求命令,这些命令被称为 HTTP 方法。每条 HTTP 请求报文都包含一个方法。这个方法会告诉服务器要执行什么动作(获取一个 Web 页面、运行一个网关程序,删除一个文件等)。
4.2 状态码
- 每条 HTTP 响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,告知客户端请求是否成功,或者是否需要采取其他动作。
4.3 Web 页面中可以包含多个对象
- 一个 Web 页面通常不是单个资源,而是一组资源的集合:
五、报文
- HTTP 报文是由一行一行的简单字符串组成的。HTTP 报文都是纯文本,不是二进制代码,所以人们可以很方便地对其进行读写。
- HTTP 报文分两种,其中从 Web 客户端发往 Web 服务器的 HTTP 报文称为 请求报文。从服务器发往客户端的报文称为 响应报文。
- HTTP 报文包括以下三个部分:
- 起始行:报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。
- 首部字段:起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号
:
来分隔。首部一个空行结束。添加一个首部字段和添加新行一样简单。 - 主体:空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给 Web 服务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据。当然,主体中也可以包含文本。
六、连接
6.1 TCP/IP
- HTTP 是个应用层协议。HTTP 无需操心网络通信的具体细节,它把联网的细节都交给了通用、可靠的因特网传输协议 TCP/IP。TCP 提供了:
- 无差错的数据传输;
- 按序传输(数据总是会按照发送的顺序到达)
- 未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)
6.2 基本的浏览器连接处理步骤
基本的浏览器连接处理图解(a)浏览器从 URL 中解析出服务器的主机名;
(b)浏览器将服务器的主机名转换成服务器的 IP 地址;
(c)浏览器将端口号(如果有的话)从 URL 中解析出来;
(d)浏览器建立一条与 Web 服务器的 TCP 连接;
(e)浏览器向服务器发送一条 HTTP 请求报文;
(f)服务器向浏览器会送一条 HTTP 响应报文;
(g)关闭连接,浏览器显示文档。
七、Web 的结构组件
7.1 代理
- 位于客户端和服务器之间的 HTTP 中间实体:
7.2 缓存
- HTTP 的仓库,使常用页面的副本可以保存在离客户端更近的地方:
7.3 网关
- 链接其他应用程序的特殊 Web 服务器:
7.4 隧道
- 对 HTTP 通信报文进行盲转发的特殊代理:
7.5 Agent 代理
- 发起自动 HTTP 请求的半智能 Web 客户端: