day04|计算机网络重难点之HTTP/1.0和HTTP/1.1的区别、HTTP/2.0与HTTP/1.1的区别、介绍HTTP/3.0
8.HTTP/1.0和HTTP/1.1的区别
- 第一个是 持久连接:HTTP/1.1 默认支持持久连接,允许在一个TCP连接上发送多个 HTTP请求和响应,从而减少了因连接的建立和关闭所产生的开销;而 HTTP/1.0 默认 短连接,每次请求都需要建立一个TCP连接。它也可以通过在头部中包含 Connection:keep-alive 值来实现持久连接
- 第二个是 管道化:HTTP/1.1 支持管道化,但并不是默认开启的。它可以让客户端 在第一个请求到达之前 就可以发送多个请求,从而减少等待时间,提高效率。而 HTTP/1.0 不支持管道化
- 第三个是 缓存控制:HTTP/1.0 主要使用 If-Modified-Since 或者Expires 字段 来作为缓存判断的标准,而 HTTP/1.1 则引入了更多的缓存控制策略,比如 ETag 和If-None-Matech 等更多可选择的缓存头 来实现缓存控制
- 第四个是 错误处理:HTTP/1.1 增加了一些新的HTTP状态码,比如 100 Continue,用于 增强错误处理和请求的 中间响应
- 第五个是 Host 头:HTTP/1.1 新引入了 Host头,可以让客户端指定请求的目标主机名,从而可能让同一台服务器 托管 多个域名
- 第六个是 带宽优化:HTTP/1.0 会存在带宽浪费的现象,当客户端只是请求 资源的某一部分 时,服务器却将 整个资源 都发送过来。而且不支持 断点续传 功能;而 HTTP/1.1 则在请求头部中引入了 range 头域,它允许 只请求资源的某个部分,返回码是 206
9.HTTP/2.0与HTTP/1.1的区别?
- 第一个是 二进制协议:HTTP/1.1 使用文本格式 传输数据,而 HTTP/2.0 采用二进制格式,从而让解析更高效,减少解析时间
- 第二个是 多路复用:HTTP/2.0 支持多路复用,也就是 在单个TCP多接上 并行 发送 多个请求和响应, 从而解决了 HTTP/1.1 中的 队头阻塞 的问题
- 第三个是 头部压缩:HTTP/2.0 引入了 HPACK 压缩算法,对请求和响应的头部信息 进行压缩,减少了头部冗余信息的传播,提高了传输效率
- 第四个是 服务器推送:HTTP/2.0 允许 服务器 主动推送资源给 客户端,而且并不需要 客户端 给出明确的请求,从而可以减少 页面加载 的时间
- 第五个是 优先级和依赖关系:HTTP/2.0 允许 客户端 为请求设置优先级 和 请求之间的 依赖关系,让 资源加载 更有序
10.HTTP/3.0有了解过吗?
HTTP3.0 是 HTTP 协议的最新版本,它基于 QUIC 协议,使用 UDP 来传输数据,具有以下特点:
- 第一个是 彻底解决头部阻塞问题:HTTP/2.0,尽管从逻辑上不同的流之间相互独立,不会相互影响,但在实际传输时数据还是要一帧一帧的发送和接收,一旦某一个流的数据有丢包,则同样会阻塞在它之后传输的流数据传输。而基于UDP的QUIC协议则可以更为彻底地解决这样的问题,让不同的流之间真正的实现相互独立传输,互不依赖。
- 第二个是 连接建立时 零耗时:QUIC 在首次连接建立时,消耗的往返时延为0,从而减少连接延迟,加快页面加载速度
- 第三个是 连接迁移:QUIC 允许在 IP地址发生变化时 保持连接状态,从而在网络切换时(如从 Wi-Fi 到 移动网络),减少 连接的中断时间,提高用户体验
- 第四个是 向前纠错机制:每个数据包 除了它本身的内容之外,还包括了一部分 其他数据包的数据。所以当出现少量丢包时,可以通过其他包的 冗余数据进行组装 来替代 重传。虽然这样牺牲了每个数据包发送数据的上限,但是 减少了因 丢包导致的 数据重传
- 第五个是 安全性:HTTP3.0默认使用 TLS 加密,确保了 数据传输 的 安全性