http是构建于tcp/ip协议之上的,是无连接无状态的。
http1.1与http1.0的区别
缓存处理
http1.0主要借助Expires、if-modified-since来进行缓存的判断。
http1.1中新增了Etag与if-none-match字段。
带宽优化及网络连接
http1.1在请求头中引入了range字段,允许只请求资源的某一部分,返回码是206
长连接
http1.1支持长连接,即在一个tcp连接上传送多个http请求和响应,减少了建立和关闭连接的消耗和延迟。
在http1.1中默认开启connection:keep-alive。
SPDY
SPDY是google提出的协议,可以说是综合了HTTPS和HTTP两者有点于一体的传输协议:
降低延迟
SPDY采取了多路复用,通过多个请求stream共享一个tcp连接的方式来降低延迟并提高带宽利用率。
请求优先级
多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。
SPDY允许给每个request设置优先级,这样重要的请求就会优先得到响应。
header压缩
基于ssl的加密传输
服务端推送
HTTP2.0
http2.0是基于SPDY设计的,有以下新特性:
二进制格式
http1系列是基于文本的,而HTTP/2 采用二进制格式传输数据
多路复用
一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。
header压缩
HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用HPACK来对头部进行压缩。
HPACK使用一份索引表来定义常用的HTTP Header,把常用的HTTP Header存放在表里,请求的时候只需要发送表里的索引位置即可。
HPACK 不仅仅通过索引键值对来降低数据量,同时还会将字符串进行霍夫曼编码来压缩字符串大小。
服务端推送
同SPDY一样,HTTP2.0也具有server push功能。