一、HTTP1.0与HTTP1.1的区别
1. 长连接
- HTTP 1.1支持长连接,每一个连接上可以传送多个请求和响应,默认开启Connection:Keep-Alive
- HTTP1.0 默认为短连接,每次请求都需要建立一个TCP连接
2. 缓存
- HTTP 1.0主要使用If-Modified-Since/Expires来做为缓存判断的标准
- HTTP 1.1则引入了更多的缓存控制策略例如Entity tag / If-None-Match等更多可供选择的缓存头来控制缓存策略
3. 管道化
- 基于HTTP1.1的长连接,使得请求管线化成为可能。管线化使得请求能够"并行"传输,但是响应必须按照请求发出的顺序依次返回,性能在一定程度上得到了改善
4. 增加主机字段
- 使得一个服务器能够用来创建多个 Web 站点
5. 状态码
- 新增了24个错误状态响应码
6. 带宽优化
- HTTP1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能
- HTTP 1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content)
二、HTTP2.0与HTTP1.1的区别
1. 二进制分顿
- 在应用层(HTTP/2.0) 和传输层(TCP or UDP) 之间增加一个二进制分恢层,从而突破 HTTP1.1的性能限制,改进传输性能,实现低延迟和高吞吐量。
2.多路复用 (MultiPlexing)
- 允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息,这个强大的功能则是基于“一进制分帧”的特性。
3. 首部压缩
- HTTP1.1 不支持 header数据的压缩,HTTP/2.0 使用HPACK 算法对 header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。高效的压缩算法可以很大的压缩 header ,减少发送包的数量从而降低延迟
4. 服务端推送 (server push)
- 在HTTP/2 中,服务器可以对客户端的一个请求发送多个响应,即服务器可以额外的向客户端推送资源,而无需客户端明确的请求。