当前位置: 首页 > article >正文

20250111面试鸭特训营第19天

更多特训营笔记详见个人主页【面试鸭特训营】专栏

1. HTTP 1.0 和 2.0 有什么区别?

名称描述
HTML超文本标记语言,描述超文本
HTTP超文本传输协议,传输超文本
URI统一资源标识符,作为互联网上的唯一标识
  • HTTP 0.9

    • 最基础的HTTP版本。
    • 仅支持GET请求
    • 没有头部信息和缓存机制。
  • HTTP 1.0

    • 引入了请求头和响应头,使请求和响应更灵活,把控制数据和业务实体进行拆分,也算是一种解耦合。
    • 增加了响应状态码,请求方可以得知服务端的情况,可以区分请求出错的原因。
    • 在请求中加入了 HTTP 版本号,表明这是一种工程化的象征,便于根据版本号进行管理。
    • 引入了 Content-Type , 使得传输的数据不再限于文本,支持传输不同类型的数据,丰富了协议的载体。
    • 支持多种请求方法。
    • 但每个请求都需要单独建立TCP连接。
  • HTTP 1.1

    • 新增了连接管理(Keep-Alive),允许持久连接。
    • 支持 pipeline ,无需等待前面的请求响应,即可发送第二次请求。
    • 允许响应数据分块(chunked),即响应的时候不标明Content-Length,客户端就无法断开连接,直到收到客户端的 EOF,利于传输大文件。
    • 加入了 Host 头,当一台设备部署了多个主机,且多个域名解析是同一个 IP 时,可以通过 Host 头就可以判断要访问哪个主机。
    • 新增缓存的控制和管理。
    • 支持更丰富的请求方法,并改进了缓存控制和流量控制,但仍存在队头阻塞问题。
  • HTTP 2.0

    • 采用二进制协议,不再是纯文本,简化了整齐的复杂性,解析数据的开销更小,数据更加紧凑,减少了网络的延迟,提升了整体的吞吐量。

    • 支持一个 TCP 连接发起多请求,支持多路复用,移除了 pipeline,避免了阻塞。

    • 解决了 HTTP 队头阻塞的问题,也规避了 TCP 慢启动带来的影响。

    • 利用 HPACK 压缩头部,采用了静态表、动态表和哈夫曼编码,在客户端和服务器都维护请求头的列表,所以只需要增量和压缩过的头部信息,服务端拿到之后组装一下就能得到完整的头部信息,可以减少数据传输量。

    • 允许服务端主动推送数据,减少了请求的次数。

    • 支持多路复用、头部压缩、流量控制和服务器推送,大大提升了性能,避免了队头阻塞问题。

  • HTTP 3.0

    • 基于 QUIC 协议,使用 UDP 替代 TCP ,QUIC 通过自身实现可传输协议,进一步减少了握手延迟。
    • 在一个 QUIC 连接上可以同时传输多个请求和响应,并支持流优先级。
    • 减少了 TCP 的三次握手和 TLS 的握手时间。
    • 由于 QUIC 协议的特性,HTTP 3.0 具有更低的延迟。
    • 并加强了多路复用和流量控制的能力,几乎强制使用加密(TLS)。
特性HTTP 0.9HTTP 1.0HTTP 1.1HTTP 2.0HTTP 3.0
引入时间1991年1996年1999年2015年2020年
请求/响应模型单一请求单一响应每个请求独立使用一个 TCP 连接每个请求独立使用一个 TCP 连接(支持持久连接)多路复用,同一连接上并发多个请求和响应基于 QUIC 协议,使用 UDP 传输,支持多路复用和连接复用
头部无头部
仅支持GET请求
允许基本的请求头和响应头
头部不压缩
支持持久连接和分块传输
改进了缓存和压缩头部的功能
支持头部压缩(HPACK)
减少带宽使用
支持头部压缩(QPACK)
改进了性能和并发性
连接管理无持久连接每个请求响应对创建和关闭TCP连接引入持久连接(Keep-Alive)
减少了建立连接的次数
多路复用
允许在单一连接上并发多个请求
基于QUIC,支持多路复用
减少握手延迟,避免连接阻塞
请求方式仅支持GET请求支持多种方法如GET、POST、HEAD、PUT等支持多种方法,如GET、POST、PUT、DELETE、PATCH等支持与1.1相同的请求方法,支持流优先级和依赖关系支持与HTTP 2相同的方法,支持更快的连接建立和数据传输
流量控制引入流量控制,允许对每个连接设置最大数据量引入流量控制机制,优化带宽使用,避免拥塞使用 QUIC 协议,提供更高效的流量控制和拥塞控制
缓存机制不支持缓存控制支持基本的缓存控制头部,如Cache-Control增强的缓存控制机制,支持条件请求、ETag等不直接改变缓存机制,但由于多路复用减少了请求延迟由于使用 QUIC,缓存机制与 HTTP 2 类似,但连接复用更高效
加密支持支持 HTTPS,但不强制使用强烈推荐 HTTPS,但仍支持 HTTP强烈依赖 HTTPS,几乎所有的 HTTP 2 部署都要求加密强制使用 TLS(通过 QUIC),不支持明文 HTTP
请求/响应顺序严格的顺序(仅GET请求)严格的顺序,等待一个请求完成才能发起下一个请求支持请求和响应的顺序控制,且支持持久连接和流水线化支持请求/响应的多路复用,多个请求可以并发进行支持多路复用,优化了并发和连接复用,避免队头阻塞
队头阻塞(HOLB)存在存在,但可以通过持久连接减少一些问题依然存在,但可以通过管道化减少请求延迟避免队头阻塞,支持多个并行流避免队头阻塞,使用 QUIC 协议改善延迟和吞吐量
协议类型文本协议文本协议文本协议二进制协议基于 QUIC 的二进制协议
性能优化无(每个请求都需要一个新的TCP连接)支持持久连接(Keep-Alive)、分块传输、缓存改进支持多路复用、头部压缩、流量控制、服务器推送等基于 QUIC 协议,减少了握手延迟、加速连接建立和数据传输
服务器推送支持服务器推送,服务器可以预先推送资源支持服务器推送,增强了推送性能和资源管理

2. HTTP 2.0 和 3.0 有什么区别?

HTTP 2.0HTTP 3.0
传输层协议基于 TCP ,使用二进制分帧层实现多路复用基于 UDP ,使用 QUIC 协议,提供类似 TCP 的可靠性和多路复用
可靠性解决了队头阻塞问题,但仍受制于 TCP 的队头阻塞,尤其在更好延迟或丢包情况下通过 QUIC 协议,避免了 TCP 队头阻塞,即使在网络不稳定的情况下也能提供更好的性能
安全性使用 TLS 加密(HTTPS),但不强制要求加密默认使用 QUIC 自带的 TLS 1.3 加密,安全性更高,且强制加密
连接建立速度需要 TCP 三次握手和 TLS 握手,连接建立相对较慢QUIC 集成了连接建立和加密握手,连接建立速度更快,尤其在初次连接时

3. HTTP 和 HTTPS 有什么区别?

HTTPHTTPS
数据传输安全性数据以明文传输,容易被窃听篡改通过 SSL/TLS 协议对数据进行加密传输,提供数据机密性和完整性保障
端口号默认使用端口80默认使用端口443
性能无加密过程,连接建立速度稍快基于 HTTP 又加上了 SSL 或 TLS 协议来实现加密传输,加解密过程增加了计算开销,握手时间较长,但现代硬件和协议优化已使性能差距减小
SEO 影响搜索引擎一般会降低未加密站点的排名搜索引擎更倾向于优先展示 HTTPS 网站

http://www.kler.cn/a/499847.html

相关文章:

  • Elastic-Job相关
  • FPGA自学之路:到底有多崎岖?
  • postgresql|数据库|利用sqlparse和psycopg2库批量按顺序执行SQL语句(psyconpg2新优化版本)
  • 请求方式(基于注解实现)
  • vue.js 使用router-link替代a标签实现高亮
  • Windows11环境下设置MySQL8字符集utf8mb4_unicode_ci
  • UE材质控制UV
  • axios的替代方案onion-middleware
  • Windows 下安装 PyTorch 的常见问题及解决方法
  • 在php中,Fiber、Swoole、Swow这3个协程都是如何并行运行的?
  • 【HTML+CSS+JS+VUE】web前端教程-3-标题标签
  • Seata搭建
  • 解锁 C# 与 LiteDB 嵌入式 NoSQL 数据库
  • JavaScript的输出
  • 浅谈容灾技术方案详解
  • 2025年实训总结
  • 大语言模型的前沿探索:从理论到实践的深度剖析
  • 深入理解计算机系统——优化程序性能(一)
  • 类加载器和双亲委派
  • 深度学习与机器学习的关系和差别?
  • CMD批处理命令入门(4)——ping,ipconfig,arp,start,shutdown,taskkill
  • 【Unity3D】利用IJob、Burst优化处理切割物体