通信技术|从起源到发展 详说HTTP从1到3的演变

当我们打开网站时也许不会去留意网站前面的HTTP是怎么来的 。但是它毫无疑问在网络中有着举足轻重的地位 。本文从起源到发展,详说HTTP从1到3的演变 。本文不致力于讲完 HTTP 的全部内容,事实上短短的篇幅也不可能讲完 。
本文也无意于深挖 HTTP 中的某一点,这是像 《HTTP 权威指南》或者是 RFC 协议做的事 。本文目标是帮助读者理清 HTTP 的演化过程,说说 HTTP 变化的那些事 。
HTTP 的起源
HTTP 最初是 Tim BernersLee 1989 年在欧洲核子研究组织(CERN)所发起的 。Tim BernersLee 提出了一种能让远隔两地的研究者们共享知识的设想 。这个设想的基本理念是:借助多文档之间相互关联形成的超文本(HyperText),连成可相互参阅的 WWW(World Wide Web,万维网) 。用于传输的超文本传输协议(HyperText Transfer Protocol),即 HTTP 由此诞生 。
WWW 这一名称,是 Web 浏览器当年用来浏览超文本的客户端应用程序时的名称 。现在则用来表示这一系列的集合,也可简称为 Web 。
HTTP 本身是一个简单的请求-响应协议,它通常运行在 TCP 之上 。从整个网络模型来看,HTTP 是应用层的一个协议 。在 OSI 七层模型中,HTTP 位于最上层 。它并不涉及数据包的传输,只是规定了客户端和服务器之间的通信格式 。定了客户端可能发送给服务器什么样的消息以及得到什么样的响应 。请求和响应消息的头以 ASCII 码形式给出 。
HTTP 采用 BS 架构,也就是浏览器到服务器的架构,客户端通过浏览器发送 HTTP 请求给服务器,服务器经过解析响应客户端的请求 。就是这个简单实用的模型,使得 HTTP 这个基于 TCP/IP 的协议迅速推广 。
HTTP/0.9 到 HTTP/1.1
HTTP 的演化并不是一蹴而就的 。当年 HTTP 的出现主要是为了解决文本传输的难题 。由于协议本身非常简单,于是在此基础上设想了很多应用方法并投入了实际使用 。现在 HTTP 已经超出了 Web 这个框架的局限,被运用到了各种场景里 。
HTTP/0.9
HTTP 协议最早的一个版本是 1990 年发布的 HTTP/0.9 。
前面说到,HTTP 于 1989 年问世 。那时的 HTTP 并没有作为正式的标准被建立 。这时的 HTTP 其实含有 HTTP/1.0 之前版本的意思,因此被称为 HTTP/0.9 。这个版本只有一个命令:GET 。通过 GET 可以获取服务器的资源,比如请求服务器根目录下的 index.html 文件 。这个版本的协议规定,服务器只能回应 HTML 格式的字符串,不能回应其它格式,也就是说图像、视频等多媒体资源,在 HTTP/0.9 这个版本上是无法进行传输的 。
HTTP/1.0
HTTP 正式作为标准被公布是在 1996 年的 5 月,版本被命名为 HTTP/1.0,并记载于 RFC1945 [http://techimg88.guangdonglong.com/img.php?https://www.ietf.org/rfc/rfc1945.txt] 。虽说是初期标准,但该协议标准至今仍被广泛使用在服务器端 。
HTTP/1.0 版本发布,增加了 POST 命令和 HEAD 命令,丰富了浏览器与服务器的互动手段 。这个版本的 HTTP 协议可以发送任何格式的内容,包括传输文字、图像、视频、文件等,这为互联网的大发展奠定了基础 。
HTTP/1.0 除了增加了请求方法以及对发送文件的支持之外,还增加了格式的改变 。除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据 。另外还增加了状态码、多字符集支持、多部分发送(multi-part type)、权限(authorization)、缓存(cache)、内容编码(content encoding)等等 。
HTTP/1.1
HTTP/1.0 版也并不是完美的,它的主要缺点是,每一次建立 TCP 连接只能发送一个请求 。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接 。如果多次请求,势必就会对服务器产生较大的资源性能损耗 。
1997 年 1 月公布的 HTTP/1.1 是目前主流的 HTTP 协议版本 。当初的标准是 RFC2068,之后发布的修订版 RFC2616 就是当前的最新版本 。
其中最著名的是 1999 年 6 月公布的 RFC 2616 [https://tools.ietf.org/html/rfc2616],定义了 HTTP 协议中现今广泛使用的一个版本——HTTP/1.1 。
这个版本最大的变化就是将持久化连接加入了 HTTP 标准,即 TCP 连接默认不关闭,可以被多个请求复用 。此外,HTTP/1.1 版还新增了许多方法,例如:PUT、PATCH、HEAD、OPTIONS、DELETE 。得到进一步完善的HTTP/1.1 版本,一直沿用至今 。
HTTP 协议简单介绍
请求
客户端发送一个 HTTP 请求到服务器,请求消息包括以下格式:
请求行(request line)、请求头部(header)、空行和请求数据四个部分组成 。
Get 请求例子
1 > GET / HTTP/1.12 > Host: www.baidu.com3 > User-Agent: curl/7.52.14 > Accept: /
第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的 HTTP 版本 。
第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息
从第二行起为请求头部,HOST 将指出请求的目的地 。User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础 。该信息由你的浏览器来定义,并且在每个请求中自动发送等等 。


推荐阅读