2021年7月28日 补充
http1.1
- http1.1 将持久连接 keep alive 变成了默认行为 (发布于1997年)
- http1.1 存在队头堵塞 (chrome要求界面中每个域名只能建立6个持久连接)
- http1.1 头信息是文本 数据可以是文本或者 二进制
http2
- http2 (发布于2015年) 头信息和数据体都是二进制 统称为 “帧” (frame)
- http2 实现了 multiplexing 多路复用(多工)算法
- http2 连接 客户端和服务端只会建立1个连接,请求的并行处理不再依赖多个连接,没有并发限制
http3
- http3 2018年已经发布了
- http2和1.1 都是tcp 协议
- http3 使用基于UDP开发的QUIC的传输层协议 https://zhuanlan.zhihu.com/p/143464334
- QUIC(Quick UDP Internet Connections,快速 UDP 网络连接)
- QUIC 丢掉了 TCP、TLS 的包袱,基于 UDP,并对 TCP、TLS、HTTP/2 的经验加以借鉴、改进,实现了一个安全高效可靠的 HTTP 通信协议。凭借着 0 RTT 建立连接、平滑的连接迁移、基本消除了队头阻塞、改进的拥塞控制和流量控制等优秀的特性,QUIC 在绝大多数场景下获得了比 HTTP/2 更好的效果。
基本概念
图片出处: https://www.bilibili.com/video/BV1p541147LD
官方说明: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP
看图
同样的html页面 因为http协议不同 页面加载速度完全不同
http1.0 每一次请求都会进行建立连接与断开连接的操作
http1.1 只有建立连接1次 断开连接1次
Chrome浏览器最多同时建立6个连接.
http2 一次把要请求的服务全部告诉服务端, 服务端可以不按顺序返回资源
http2的浏览器兼容性
总结
- 谷歌浏览器同时只能打开6个tcp连接 (防止服务端压力过大)
- 为什么http1.1 网络传输数据量反而变大了? (使用了keep live )
- http2 核心技术 二进制分帧层 (https://juejin.cn/post/6844903545532071943)
- 如何开启http2 (nginx apache 修改配置项即可)
- 如何查看 是否开启http2? 在浏览器控制台 网络中 打开(Protocol)协议的显示
- HTTP 2.0只能用于https://网址,http://网址将继续使用HTTP 1.1