Skip to content

HTTP/1.0 HTTP/1.1 HTTP/2 主要特性对比

HTTP 参考文章

HTTP是一种无状态的【应用层】协议

无状态:同一个客户端连续两次发送请求给服务器,服务器也识别不出这是同一个客户端发送的请求。

HTTP/1.0

缺点

1、无法复用连接: HTTP/1.0规定浏览器和服务器保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连接(无连接),服务器不跟踪每个客户端,也不记录过去的请求。(无状态

2、队头阻塞:响应完当前请求才能继续发送下一个请求

HTTP/1.1

继承了HTTP/1.0简单的特点,还解决了诸多HTTP/1.0性能上的问题

优点

1、长连接:HTTP/1.1增加了一个Connection字段,默认为Keep-Alive可以保持HTTP连接不断开,即不进行四次挥手。(可手动关闭)

2、管道化:可以支持并行发送多个请求,但是响应还是得按照先后顺序。(浏览器默认禁用,因为没有从根本上解决问题)

3、chrome对同一host最多允许6个并行TCP连接(源码写死)

HTTP/1.1下单个TCP连接对应单个http请求,现代浏览器允许同时进行多个TCP连接,同时维护多个TCP连接达到并发请求的目的。也就是现代浏览器对同一host下并行加载6~8个资源的限制。【通过建立多个TCP链接实现并行】

提示

HTTP/1.1实现的并发

  • chrome在HTTP/1.1协议下对同一host有6个tcp连接并发的限制。如果所有资源部署在同一台机器上,意味浏览器在HTTP/1.1下同时最高并发6个http请求。想要同时并发达到更多的请求需要在不同的host服务上部署资源,也称域分片

如果已经部署HTTP/2的话,不要使用域分片概念,因为HTTP/2多路复用可以并发多个请求

HTTP/2实现的并发

  • 得益于多路复用特性,浏览器在http/2协议下对单一tcp请求可以并行发送多个http请求

chrome官方文档

4、缓存处理(强缓存&协商缓存)参考文章

强缓存(本地缓存)使用响应头 Cache-ControlExpires(1.0版本,不推荐)控制。

Cache-Control: max-age=3600 // 缓存有效倒计时

Cache-Control: no-store/no-cache // 不使用缓存

协商缓存被下面两组配合控制

请求头If-Modified-Since: date 与 响应头Last-Modified【判断两组时间是否一致】

请求头If-None-Match: etag 与 响应头etag【判断两组标签是都一致】

HTTP/2

1、多路复用 【实现真正的并行传输】

一次TCP握手,多个同域并行请求,请求和响应同时发送与接收,然后再拼装组合,不阻塞。而这个强大的功能则是基于“二进制分帧”的特性。

2、头部压缩

注意

在 HTTP/1 中,HTTP 请求都是由「 请求行 + 请求头 + 请求体 」三部分组成 (响应也是三部分: 「 响应行 + 响应头 + 响应体 」)

一般而言,请求体 都会经过 gzip 压缩,但 请求行请求头 却没有经过任何压缩,直接以纯文本传输。

每个页面产生的请求数也越来越多, 消耗在头部的流量就会越多,尤其是每次都要传输 UserAgent、Cookie 这类不会频繁变动的内容,完全是一种浪费。

3、服务器推送

主动向客户端推送,不需要客户端请求,nginx可配置,参见 HTTP/2 服务器推送教程

http2其他特性

HTTP/2移除了对101(切换协议)信息状态码的支持, 因为101(切换协议)的语义不适用于一个多路复用协议

伪报头字段

内置的伪头字段,浏览器http2发送请求时一般会默认带上

伪报头请求字段: :authority(代替host字段)、:method(请求方法)、:scheme(http/https协议)、:path(url path)

伪报头响应字段: :status

参考