C++面试:HTTP1.0/1.1,HTTP2.0,HTPP3.0的区别

ops/2024/12/14 5:43:45/

1.你对HTTP1.0/1.1,HTTP2.0,HTPP3.0有什么了解?

答:HTTP1.0:

①属于无连接式,每次发送HTTP请求都需要建立TCP连接。

②会造成发送时的对头阻塞,当上一个请求没有应答,当前的请求就会被阻塞。

③在HTTP1.0中主要使用header里的协商缓存 last-modified\if-modified-since,强缓存 Expires来做为缓存判断的标准。Expires明确了浏览器缓存当前URL或网址的时间。

HTTP1.1:

①常连接,不用每次发送HTTP请求都建立TCP连接。

②支持管道网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。

HTTP2.0:

①头部压缩,利用HPAK算法,维护一张表,将字段放入表中,返回索引,不用重复发送相同的字段。

②采用了二进制格式,先前HTTP1.0使用字符等数据占用空间大,还需要将数据转换为二进制格式,现在一步到位。

③HTTP2.0实现了真正的并行传输,大大节约时间成本。

④服务器会主动推送消息不再是被动。例如,客户端接收到了服务端发送的HTML文件,但是后续还需要css文件进行渲染,服务端就会主动发送css文件,不用客户端再次发送请求。

⑤还是会有由TCP导致的队头阻塞,同一个Stream的数据,在HTTP2.0中可以乱序发送,再由Streamid信息组装,但是如果其中一个片段丢失,就会导致后续的HTTP请求阻塞住,因为滑动窗口不会移动直到再次将丢失数据快重传。

https://i-blog.csdnimg.cn/blog_migrate/11d21a2544a9c9adfb4a9409e4f53cf4.png" width="642" />

 HTTP3.0:

因为上述TCP导致的问题,HTTP3.0转向底层使用UDP,为了保证可靠传输,需要QUIC来实现可靠传输。

QUIC: 

        QUIC(Quick UDP Internet Connection)是谷歌推出的一套基于UDP的传输协议,它实现了TCP + HTTPS + HTTP/2的功能,目的是保证可靠性的同时降低网络延迟。因为UDP是一个简单传输协议,基于UDP可以摆脱TCP传输确认、重传慢启动等因素,建立安全连接只需要一的个往返时间,它还实现了HTTP/2多路复用、头部压缩等功能。

众所周知UDP比TCP传输速度快,TCP是可靠协议,但是代价是双方确认数据而衍生的一系列消耗。其次TCP是系统内核实现的,如果升级TCP协议,就得让用户升级系统,这个的门槛比较高,而QUIC在UDP基础上由客户端自由发挥,只要有服务器能对接就可以。
在这里插入图片描述https://i-blog.csdnimg.cn/blog_migrate/4e1b7fcb43191d5500e581f47218a6b1.png" />

①基于 UDP:QUIC 使用 UDP(User Datagram Protocol)作为传输协议,而不是传统的 TCP(Transmission Control Protocol)。UDP 通常被认为是一种不可靠的协议,但 QUIC 通过在应用层实现可靠性机制来弥补这一点。

②减少连接建立延迟:QUIC 通过减少握手次数来加快连接建立过程。例如,QUIC 可以实现 0-RTT(零往返时间)连接建立,这意味着客户端可以在发送第一个数据包时就开始发送应用数据,而不需要等待服务器的响应。

③多路复用:QUIC 支持在一个连接中同时传输多个数据流,这可以避免 TCP 中的“队头阻塞”问题。每个数据流独立,即使某个数据流出现延迟或丢包,也不会影响其他数据流。

④内置加密:QUIC 在协议设计中集成了加密机制,提供了类似于 TLS(Transport Layer Security)的安全性。这不仅提高了安全性,还减少了加密握手的延迟。

⑤连接迁移:QUIC 支持连接迁移,即当客户端的网络条件发生变化(例如从 Wi-Fi 切换到蜂窝网络)时,连接可以无缝切换到新的网络接口,而不会中断数据传输。

⑥拥塞控制:QUIC 实现了先进的拥塞控制算法,如 Cubic 和 BBR(Bottleneck Bandwidth and RTT),以优化网络性能和减少丢包。


http://www.ppmy.cn/ops/141733.html

相关文章

大数据常用的算法--常用的分类算法

概述 分类算法是根据数据特征来预测数据的类别。 分类算法是一种监督学习(Supervised Learning)方法,它需要一个已知的类别标签的训练数据集,通过学习这个数据集来预测新的数据点的类别。例如,在电子邮件过滤系统中&am…

PostgreSQL JSON/JSONB 查询与操作指南

PostgreSQL 提供了强大的 JSON 和 JSONB 数据类型及相关操作,适用于存储和查询半结构化数据。本文将详细介绍其常用操作。 1. 基础操作 1.1 JSON 属性访问 ->: 返回 JSON 对象中的值,结果为 JSON 格式。 SELECT {"a": {"b": 1…

《庐山派从入门到...》IDE启动

《庐山派从入门到...》IDE启动 《庐山派从入门到...》IDE启动 IDE(Integrated Development Environment),即集成开发环境,是一种软件应用程序,旨在为软件开发人员提供一个全面的工具集合,以便可以更高效地编…

SQL Server 中,`timestamp` 和 `rowversion`类型特性

在 SQL Server 中,timestamp 和 rowversion 是用于标识行版本的特殊数据类型,rowversion 是 timestamp 的新名称和推荐的替代品,可以理解为rowversion 是 timestamp 的同义词。: 1. timestamp 本质: timestamp 是 SQL …

129道Go面试八股文(答案、分析和深入提问)整理

1. 在Golang中,任意类型T()都能够调用*T的方法吗?反过来呢? 回答 在 Go 语言中,关于任意类型 T 和指针类型 *T 调用方法的规则如下: 任意类型 T 调用 *T 的方法: 如果你有一个类型 T,那么 T 的…

QT从入门到精通——Qlabel介绍与使用

1. QT介绍——代码测试 Qt 是一个跨平台的应用程序开发框架,广泛用于开发图形用户界面(GUI)应用程序,也支持非图形应用程序的开发。Qt 提供了一套工具和库,使得开发者能够高效地构建高性能、可移植的应用程序。以下是…

【MIT-OS6.S081作业1.3】Lab1-utilities primes

本文记录MIT-OS6.S081 Lab1 utilities 的primes函数的实现过程 文章目录 1. 作业要求primes (moderate)/(hard) 2. 实现过程2.1 代码实现 1. 作业要求 primes (moderate)/(hard) Write a concurrent version of prime sieve using pipes. This idea is due to Doug McIlroy, in…

element左侧导航栏

由element组件搭建的左侧导航栏 预览: html代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>首页</title><style> /*<!-- 调整页面背景颜色-->*/body{background-colo…