http协议是前端常常打交道的协议之一,发展至今已经到了2.0版本,这两天我刷完了《图解HTTP》,让我对与HTTP协议的发展史有了更深层的了解html
时间要回到1989年的圣诞节,那一天李爵士发明了世界上第一个网页浏览器WorldWideWeb(同时也是网页编辑器)和第一个网页服务器。为了在网页浏览器和网页服务器中传输文本信息,李爵士将超文本嫁接到因特网上(超文本的概念并非李爵士提出来的),由此诞生了超文本标记语言(HTML)前端
为了在万维网中发布和接收HTML,李爵士发明了超文本传输协议协议,也就是HTTP的诞生web
1991年,李爵士发布文章标志着万维网公共项目的开始。在创建HTTP标准规范时,制定者主要想把HTTP看成传输HTML文档的协议,因此起初的协议很是简单。浏览器
请求由单行指令构成,以惟一可用方法GET开头,其后跟目标资源的路径(一旦链接到服务器,协议、服务器、端口号这些都不是必须的)。缓存
GET /mypage.html安全
响应也极其简单的:只包含响应文档自己。bash
<HTML>这是一个很是简单的HTML页面</HTML>服务器
跟后来的版本不一样,HTTP/0.9的响应内容并不包含HTTP头,这意味着只有HTML文件能够传送,没法传输其余类型的文件;也没有状态码或错误代码:一旦出现问题,一个特殊的包含问题描述信息的HTML文件将被发回,供人们查看。网络
这时的HTTP协议,服务器发送完毕后就会关闭TCP链接编辑器
因为 HTTP/0.9 协议的应用十分有限,浏览器和服务器的迅速发展和扩展,使其已经不可以知足须要,因此,1996年5月,HTTP协议的1.0版本发布,此次发布的内容并无被归入标准,而是为1.1版本的构建可扩展性的尝试,更新的内容也很是多,主要有
此时,HTTP的请求已经变成这样了
GET / HTTP/1.0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
Accept: */*
复制代码
响应变成了这样
HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84
<html>
<body>Hello World</body>
</html>
复制代码
此时的HTTP协议已经初具雏形,和咱们如今看到的很是像,这是第一个在通信中指定版本号的HTTP协议版本,至今仍被普遍采用,可是它并非没有问题的,它仍然存在着0.9版本的问题,就是TCP链接不能够复用,每次发送请求都须要创建TCP链接,新建成本高,还须要发送前的预热。因此HTTP/1.0性能较差,为了解决这个问题,有些浏览器在发送请求时,使用了一个非标准的Connection
字段。
Connection: keep-alive
复制代码
服务器不关闭TCP链接,以便其余请求复用,一样回复
Connection: keep-alive
复制代码
一个能够复用的TCP链接就创建了,直到客户端或服务器主动关闭链接。可是,这不是标准字段,不一样实现的行为可能不一致,所以不是根本的解决办法。
就在HTTP/1.0发布的几个月后,HTTP/1.1就诞生了,此次版本它进一步完善了HTTP协议,哪怕到今天都是最流行的协议之一
HTTP/1.1 消除了大量歧义内容并引入了多项改进:
Host
头,可以使不一样域名配置在同一个IP地址的服务器上。已经发展到这个时候,那么协议完美了吗
事实上并无,虽然能够复用TCP链接,而且能够在一个链接中同时发送多个HTTP请求,可是服务端的处理是按顺序的,这就形成一个请求阻塞了,那么后面的全部请求的响应都会阻塞,这称为"队头堵塞"(Head-of-line blocking)
解决方法一是减小请求数,二是同时多开持久链接。但通常浏览器最多同时创建六个TCP链接
随着时代的发展,web的用途开始变得多种多样,好比在线购物网站、社交网络服务、企业或组织内部的各类管理工具,等等
虽然这些功能已经经过web应用和脚本程序实现,但在性能上未必最优,这是由于HTTP协议上的限制以及自身性能有限。
如下这些HTTP标准就会成为瓶颈
HTTP的功能不足能够经过建立一套全新的协议来弥补,但是目前基于HTTP协议的web浏览器已经遍及全球,所以没法彻底抛弃HTTP,有一些新协议的规则是基于HTTP的,并在此基础上添加了新的功能
Google在2010年发布了SPDY,其开发目标旨在解决HTTP的性能瓶颈,缩短Web页面的加载时间(50%)
SPDY没有彻底改写HTTP协议,而是在应用层和传输层之间经过新加会话层的形式运做。同时,考虑到安全性问题,SPDY规定通讯中使用SSL。
SPDY仍是采用HTTP创建通讯链接。所以仍是可使用HTTP的GET或POST等方法、Cookie以及HTTP报文等。
HTTP得到了如下额外的功能
SPDY解决了部分问题,可是并无从根本解决问题。
但这个协议在Chrome浏览器上证实可行之后,就被看成 HTTP/2 的基础,主要特性都在 HTTP/2 之中获得继承。
HTTP/2.0的目标是改善用户在使用Web时的速度体验
对比HTTP/1.1,改善有以下几点