HTTP1.0 到 HTTP3.0 的优化

HTTP 1.0

一个连接只能传输一个请求和响应。

  1. 每次发起请求都要新建TCP连接
  2. 无法多路复用: 只能按顺序传输一个请求和响应,无法同时传输多个请求和响应。
  3. 队头阻塞问题: 如果上一个请求的响应没收到,后续的请求会被阻塞。

HTTP 1.1

  1. 长连接: 一个TCP连接传输多个请求和响应。
  2. 管道传输: 客户端可以同时发送多个请求,但是服务端需要按顺序响应请求,没有实质解决队头阻塞问题。
  3. 分块传输编码: 服务器不知道数据总大小时可以采用分块传输编码,此时 Content-Length 字段不会被包含在响应头中。可以通过特定的符号标识消息的结束。
  4. 虚拟主机: 在请求头添加 Host 字段,区分不同的主机。因为一台服务器可以有多个虚拟主机。
  5. 引入了更过的缓存控制选项: 引入了 Cache-Control 头部,它提供了一系列指令来控制缓存的行为,如 no-cache、no-store、max-age、public、private 等。这些指令允许更精细地控制资源是否可以被缓存以及缓存的条件。

HTTP 2.0

默认使用 HTTPS 进行传输

  1. 多路复用: 允许同时通过一个连接并行传输多个请求和响应,解决了队头阻塞问题。

  2. 二进制分帧: 将传输的数据分成一个个二进制帧,可以独立传输,每个帧的头部会携带 Stream ID 信息,所以接收端可以通过 Stream ID 有序组装成 HTTP 消息。

  3. 头部压缩: 使用 HPACK 算法对头部信息进行压缩,减少了头部信息的传输量。

    HPACK 算法:
    在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,就不用重复发送同样字段了,只发送索引号,减少数据量提高速度

  4. 服务端推送: 服务端不再是被动地响应,可以主动向客户端发送消息、推送额外的资源,比如客户端请求网页,服务端会将相关的 CSS、JavaScript 或图片文件等。

HTTP 3.0

  1. 使用基于 UDP 协议的 QUIC 协议进行传输,解决 TCP 队头阻塞和 TCP 握手延迟的问题。
  2. 将一个连接分成多个数据流,每个数据流都有独立的 ID,可以独立控制和传输数据。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值