傻大方


首页 > 潮·科技 > >

一文读懂 HTTP/1、HTTP/2、HTTP/3



按关键词阅读:

作者:charryhuang , 腾讯 CSIG 前端开发工程师
从 1989 年万维网(www)诞生 , HTTP(HyperText Transfer Protocol)经历了众多版本迭代 , WebSocket 也在期间萌芽 。 1991 年 HTTP0.9 被发明 。 1996 年出现了 HTTP1.0 。 2015 年 HTTP2 正式发布 。 2020 年 HTTP3 或能正式使用 。 以下将会简单介绍 。
HTTP1.1 与 HTTP2HTTP1.1 的缺陷

  1. 高延迟 — 队头阻塞(Head-Of-Line Blocking)
  2. 无状态特性 — 阻碍交互
  3. 明文传输 — 不安全性
  4. 不支持服务端推送
队头阻塞
队头阻塞是指当顺序发送的请求序列中的一个请求因为某种原因被阻塞时 , 在后面排队的所有请求也一并被阻塞 , 会导致客户端迟迟收不到数据 。
针对队头阻塞:
1.将同一页面的资源分散到不同域名下 , 提升连接上限 。 虽然能公用一个 TCP 管道 , 但是在一个管道中同一时刻只能处理一个请求 , 在当前的请求没有结束之前 , 其他的请求只能处于阻塞状态 。
2.减少请求数量
3.内联一些资源:css、base64 图片等
4.合并小文件减少资源数
【一文读懂 HTTP/1、HTTP/2、HTTP/3】无状态特性
无状态是指协议对于连接状态没有记忆能力 。 纯净的 HTTP 是没有 cookie 等机制的 , 每一个连接都是一个新的连接 。 上一次请求验证了用户名密码 , 而下一次请求服务器并不知道它与上一条请求有何关联 , 换句话说就是掉登录态 。
不安全性
传输内容没有加密 , 中途可能被篡改和劫持 。
SPDY 协议
SPDY 是由 google 推行的改进版本的 HTTP1.1 (那时候还没有 HTTP2) 。
一文读懂 HTTP/1、HTTP/2、HTTP/3文章插图
特性:
  1. 多路复用 — 解决队头阻塞
  2. 头部压缩 — 解决巨大的 HTTP 头部
  3. 请求优先级 — 先获取重要数据
  4. 服务端推送 — 填补空缺
  5. 提高安全性
多路复用
SPDY 允许在一个连接上无限制并发流 。 因为请求在一个通道上 , TCP 效率更高(参考 TCP 拥塞控制中的慢启动 ) 。 更少的网络连接 , 发出更密集的包 。
头部压缩
使用专门的 HPACK 算法 , 每次请求和响应只发送差异头部 , 一般可以达到 50% ~90% 的高压缩率 。
请求优先级
虽然无限的并发流解决了队头阻塞的问题 , 但如果带宽受限 , 客户端可能会因防止堵塞通道而阻止请求 。 在网络通道被非关键资源堵塞时 , 高优先级的请求会被优先处理 。
服务端推送
服务端推送(ServerPush)() , 可以让服务端主动把资源文件推送给客户端 。 当然客户端也有权利选择是否接收 。
提高安全性
支持使用 HTTPS 进行加密传输 。
HTTP2HTTP2 基于 SPDY , 专注于性能 , 最大的一个目标是在用户和网站间只用一个连接 。
新增特性:
  1. 二进制分帧 - HTTP2 性能增强的核心
  2. 多路复用 - 解决串行的文件传输和连接数过多
二进制分帧
首先 , HTTP2 没有改变 HTTP1 的语义 , 只是在应用层使用二进制分帧方式传输 。 因此 , 也引入了新的通信单位:帧、消息、流 。
分帧有什么好处?服务器单位时间接收到的请求数变多 , 可以提高并发数 。 最重要的是 , 为多路复用提供了底层支持 。
多路复用
一个域名对应一个连接 , 一个流代表了一个完整的请求-响应过程 。 帧是最小的数据单位 , 每个帧会标识出该帧属于哪个流 , 流也就是多个帧组成的数据流 。 多路复用 , 就是在一个 TCP 连接中可以存在多个流 。 演示
一文读懂 HTTP/1、HTTP/2、HTTP/3文章插图
HTTP2 的缺陷
  1. TCP 以及 TCP+TLS 建立连接的延时
  2. TCP 的队头阻塞并没有彻底解决
  3. 多路复用导致服务器压力上升
  4. 多路复用容易 Timeout
建连延时
TCP 连接需要和服务器进行三次握手 , 即消耗完 1.5 个 RTT 之后才能进行数据传输 。
TLS 连接有两个版本—— TLS1.2 和 TLS1.3 , 每个版本建立连接所花的时间不同 , 大致需要 1~2 个 RTT 。
RTT(Round-Trip Time):往返时延 。 表示从发送端发送数据开始 , 到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认) , 总共经历的时延 。
队头阻塞没有彻底解决
TCP 为了保证可靠传输 , 有一个“超时重传”机制 , 丢失的包必须等待重传确认 。 HTTP2 出现丢包时 , 整个 TCP 都要等待重传 , 那么就会阻塞该 TCP 连接中的所有请求 。
一文读懂 HTTP/1、HTTP/2、HTTP/3文章插图


稿源:(未知)

【傻大方】网址:http://www.shadafang.com/c/111J2F212020.html

标题:一文读懂 HTTP/1、HTTP/2、HTTP/3


上一篇:天价国产手机卖不动了?万元价格降至千元以下,买家依旧寥寥无几

下一篇:微软Edge浏览器市场份额首次破10%,在谷歌面前仍不值一提