HTTP的发展历程
1.HTTP0.9
超文本传输协议:传输内容较单一
1.只有一个请求行,没有请求头和请求体
2.响应数据没有头信息
3.响应数据以ASCII码的形式传输
4.只能发送get这样的简单请求
2.HTTP1.0
解决问题:随着传输数据类型的多样化,客户端和服务器都需要给对方传达更多信息
方法:
1.引入请求头和响应头
请求头中包含的信息有:文件类型accept、文件压缩方式accept-encoding、文件的编码类型accept-Charset、所需的文件语言类型accept-language
响应头中包含的信息有:文件最终压缩方式content-encoding、文件类型content-type
2.引入状态码
3.引入catch机制,对数据进行缓存
4.请求头中添加用户代理字段
3.HTTP1.1
解决问题:
1.多次tcp连接浪费时间和资源
2.队头阻塞
3.虚拟服务器问题
4.内容动态生成导致无法确定传输文件大小
方法:
1.持久连接:在一个TCP连接上可以传输多个HTTP请求。
默认Connection为keep-alive状态。目前浏览器中对于同一域名,默认允许同时建立6个TCP持久连接。
2.管线化:试图解决队头阻塞问题,将请求整批发送给服务器
3.提供虚拟机支持,请求头中增加host字段
4.支持动态内容:使用chunk transfer解决文件大小不固定的情况
5.客户端cookie和安全机制
4.HTTP2
要解决的问题:
1.HTTP1.1中同一域名可连通多个TCP连接,各个TCP之间将会竞争带宽,导致传输受阻。并且由于TCP的慢启动,在文件较小的情况下传输情况受限。
因此,在HTTP2中限制一个域名使用一个TCP长连接,减少带宽的竞争和慢启动。
2.队头阻塞问题
方法:
http2的优化策略都是在二进制分帧的基础上得到的。
1.二进制分帧:添加二进制分帧层,将数据包分成更小的数据帧进行传输
2.多路复用机制
3.设置请求优先级
4.服务器推送
5.头部压缩