HTTP协议概念
如果问什么是HTTP协议,很多人都可以很轻松的回答出“HTTP协议就是超文本传输协议啊”。可是再往深了追问,什么是超文本?什么是传输协议?怎么传输的?可能有的人就不知其所以然了,至少在我着手开始系统的整理HTTP协议之前,对这些概念是不完全清晰的。
什么是协议?
生活中的协议其实随处可见,毕业时要和学校、实习公司签三方协议;租房要和中介、业主签租房协议,到公司入职了,要签订保密协议等等。这都是协议,简单来说协议是至少有两个参与者,大家都得遵守,如果不遵守的话,就得付出一些代价,至少有的事儿就办不成了,那么 _“传输协议"_ 指的就是在计算机网络上用来传输数据的规范,当然这个约定是由很权威的机构协商制定的一个标准,比如微软、谷歌等。有了这个标准之后,网络世界就和谐多了,我按照这个标准发送数据,你接收到数据之后按照这个标准去解析,解析完就能看懂我发的是啥,要是不按照这个标准去解析数据,就看不懂。
超文本又是什么?
在互联网早期,网络上大多数信息都是以文本的形式展示的,但是有些文本(各种标签)对于浏览器来说是有着特殊含义的,这就是我们今天在网页上看到各种各样的布局的原因,所以这里的超文本指的就是HTML、和XHTML中的"HT"-超文本(HyperText).这是一开始HTTP协议的由来,但是今天,各种音视频、图片都在网络上出现了,大都同样需要使用HTTP协议进行传输,所以今天的超文本的含义应该不再局限于HTML了。
HTTP的前世今生
诞生
在20世纪60年代,美国国防部高等研究计划署(ARPA)建立了ARPA网,有四个分布在各地的节点,这是如今互联网的始祖。在70年代时,基于对ARPA网络的实践和思考,研究人员发明出了著名的TCP/IP协议,由于具有良好的分层结构和稳定性能,TCP/IP协议迅速发展起来,在80年代进入了UNIX系统的内核,促进了今天的互联网技术。
1989年,欧洲核子研究中心的蒂姆-博纳斯-李发表了一篇论文,提出了在互联网上构建超链接文档系统的构想,在这篇文档中确立了三项关键的技术:URI、HTML、HTTP,这些技术在今天看起来不足为奇,可是在当时确实创世纪的发明,基于这些,可以把超文本系统完美的运行在互联网上,和世界各地的人共享信息,蒂姆把这个系统称为万维网(Word Wide Web).就是今天的web。
HTTP/0.9在1990年代诞生,当时互联网很简单,网络上的信息大部分都是文本形式,蒂姆最初认为网络上的文档都是只读的,所以只允许使用GET请求服务器上的HTML。并且在请求完成之后,立即关闭链接。功能很有限。
HTTP/1.0
在1993年前后,技术进一步发展,图片格式、MP3格式、Mosaic(第一个图文混排的浏览器)、Apache服务也相继被发明出来,基于这些技术,大家对HTTP协议的需求变得更迫切,促进了HTTP协议的发展,于是HTTP/1.0版本在1996年正式发布,虽然这是初期的一个版本,但是和今天的HTTP协议差别不大:
* 增加了HEAD、POST等方法
* 增加了响应状态码
* 引入了协议版本号的概念
* 引入HTTP Header的概念
* 数据不再局限于文本
HTTP/1.1
这是一个HTTP协议的标准,在现在都有很多公司都在使用,它的诞生颇有些悲壮的气息,在1995年网景和微软开始了注明的"浏览器"大战,都希望在互联网上占据主导地位,这场战斗最后IE取得了决定性的胜利。这场战役的是非成败并非我们关心的,姑且放在一边,重要的是它再一次极大的推动了Web技术的发展,HTTP/1.0在这个过程中经受了实践的检验。于是在1999年,大战结束后,HTTP/1.1正式发布。HTTP1.1的发布,互联网世界有了一个标准,意味着在今后互联网上所有的浏览器、服务器、网关代理等,只要是用到了HTTP协议,就必须严格遵守这个标准,相当于互联网世界的立法。
HTTP/1.1和HTTP/1.0的主要区别是:
* 增加了PUT、DELETE请求方式(到目前为止HTTP协议支持:GET、POST、PUT、HEAD、DELETE请求)
* 增加了缓存管理和控制
* 明确链接管理、支持长连接
* 允许响应数据分块(CHUNKED),利于大文件传输
* 强制要求Host头
在HTTP/1.1被推出后,诞生了很多知名互联网公司:Google、新浪、搜狐、网易、腾讯等
HTTP/2
基于HTTP/1.1诞生了很多互联网公司,可是随着互联网的发展、用户的暴增,HTTP/1.1慢慢显得力不从心,主要就是连接慢,无法跟上迅猛发展的互联网。但是HTTP/1.1作为标准仍然岿然不动。终于有一天,Google无法忍受了,首先开发了Chrome浏览器,然后又推出了SPDY协议,并在Chrome里应用自家的服务器,依仗用户数量的优势,掀起了第二次浏览器大战的序幕。不过这次胜利者是Google,Chrome在全球占有率超过60%。Google借此把SPDY推上了标准的宝座,互联网标准组织以SPDY为基础开始制定新版本的HTTP协议。最终在2015年发布,即HTTP/2.
HTTP/2充分考虑了当今互联网的现状,带宽、移动、不安全等情况,在高度兼容HTTP/1.1的同时在性能改善方面做了很大的努力。主要有以下几点:
* 二进制协议,不再仅仅是纯文本
* 可以同时发起多个请求,废弃HTTP/1.1的管道
* 使用专用的压缩算法压缩头部,减少数据传输
* 允许服务器推送数据
* 增加了安全性
HTTP/3
在HTTP/2还处于萌芽状态时,Google发明了一个新的协议:QUIC,当然QUIC禁住了现实的考验,在2018年,互联网标准组织提议将HTTP over QUIC 更名为HTTP/3并获得批准,HTTP/3正式进入了标准制定阶段。