HTTP1.0/1.1之间的区别
- HTTP1.1默认为长连接,而http1.0默认为短连接。因此http可以使用长连接使多个http连接请求复用一个TCP连接,降低连接的延迟;
- HTTP1.1在请求头中引入了range头域,允许只请求资源的某一部分,并返回206状态码;HTTP1.0中则只能请求整个对象;
- HTTP1.0中主要使用header 里的 If-Modified-Since,Expires 来做为缓存判断的标准;而HTTP1.1中引入了Etag、If-Unmodified-Since、If-Match、If-None-Match 等更多可供选择的缓存头来控制缓存策略;
- HTTP1.1中新增了host字段,用来指定服务器的域名,而HTTP1.0中认为每台服务器只绑定唯一一个IP地址。但现在每台物理服务器上可以存在多个虚拟主机,共享一个IP地址,需要host字段请求一个服务器上的不同网站;
- 新增了除GET、POST以外的其他方法。
HTTP1.1/2.0之间的区别
- 二进制协议:1.1中,头信息必须是文本,数据体可以使文本也可以是二进制;2.0中,头信息和数据体都是二进制,统称为“帧”,这也是多路复用的基础。
- 多路复用:2.0仍然复用TCP连接,但是可以同时发送多个请求和响应,避免了1.1中可能发生的“队头堵塞”。
- 数据流:由于多路复用,2.0中的信息不是按照顺序发送的,因此需要对数据包进行标记,每个请求或者返回的数据包,称为一个数据流。在数据包发送时,会标记数据流的ID,用来区分。
- 头信息压缩:由于HTTP1.1协议不带有状态,每次请求都会附上所有信息,比如Cookie和User Agent,浪费了很多带宽。HTTP2.0对这一点做了优化,一方面,头信息会经过gzip压缩,另一方面,客户端和服务器会共同维护一张头信息表,所有字段放入这个表并生成索引号,这样就不用发送重复字段,只发送索引就可以了。
- 服务器推送:HTTP2.0允许服务器未经请求主动发送资源,提前给客户端推送必要的资源 ,这样就可以相对减少一些延迟时间。这里需要注意的是 http2 下服务器主动推送的是静态资源,和 WebSocket 以及使用 SSE 等方式向客户端发送即时数据的推送是不同的。