Day15_http协议

news/2025/3/16 23:56:44/文章来源:https://www.cnblogs.com/piphermitage/p/18775994

每日一题

面试题:
请解释以下问题:

  1. HTTP/2 的主要改进有哪些?与 HTTP/1.1 相比,它如何解决“队头阻塞”问题?
  2. HTTPS 是如何实现数据加密的?详细说明 TLS 握手过程。
  3. HTTP/3 为什么选择基于 UDP 的 QUIC 协议?它解决了哪些传统 TCP 协议的缺陷?

解答:

1. HTTP/2 的改进与队头阻塞问题

主要改进:

  • 多路复用(Multiplexing):单个 TCP 连接上可并行传输多个请求/响应,避免 HTTP/1.1 中管道化(pipelining)的队头阻塞问题。
  • 二进制分帧:将数据拆分为更小的二进制帧(如 HEADERS 帧、DATA 帧),提升解析效率。
  • 头部压缩(HPACK):使用静态 Huffman 编码压缩重复的 HTTP 头部,减少冗余数据传输。
  • 服务器推送(Server Push):服务器可主动向客户端推送资源(如 CSS/JS),减少额外请求延迟。

队头阻塞的解决

  • HTTP/1.1 中,若某个请求响应延迟,后续请求会被阻塞(即使资源已就绪)。
  • HTTP/2 通过多路复用和二进制分帧,允许不同请求/响应的帧交织传输,避免因单个请求阻塞整个连接。

2. HTTPS 加密与 TLS 握手过程

加密机制
HTTPS = HTTP + TLS/SSL,通过以下两种加密结合实现安全传输:

  • 非对称加密:用于身份认证和密钥交换(如 RSA、ECC)。
  • 对称加密:用于加密实际传输数据(如 AES、ChaCha20),效率更高。

TLS 握手流程(以 TLS 1.3 为例):

  1. Client Hello:客户端发送支持的 TLS 版本、加密套件列表和随机数。
  2. Server Hello:服务器选择加密套件、发送证书和随机数,并生成密钥交换参数(如公钥)。
  3. 密钥交换:客户端验证证书后,生成预主密钥,用服务器公钥加密后发送。
  4. 会话密钥生成:双方基于随机数和预主密钥生成对称加密的会话密钥。
  5. Finished:双方交换加密后的完成消息,验证握手完整性,随后开始加密通信。

3. HTTP/3 与 QUIC 协议

选择 QUIC 的原因
HTTP/3 基于 QUIC(Quick UDP Internet Connections),主要解决 TCP 的以下缺陷:

  • TCP 队头阻塞:TCP 要求数据按序到达,单个丢包会阻塞后续所有数据。QUIC 在应用层实现多路复用,各流独立传输。
  • 连接迁移:QUIC 使用连接 ID(而非 IP/端口),网络切换时(如 Wi-Fi 转 4G)无需重新握手。
  • 更快的握手:QUIC 将 TLS 1.3 集成到协议中,0-RTT(零往返时间)即可恢复会话。

实际优势

  • 减少延迟,提升弱网环境(如高丢包率)下的性能。
  • 避免中间设备(如 NAT)对 TCP 协议的干扰。

总结:HTTP/2 优化传输效率,HTTPS 保障安全,HTTP/3 通过 QUIC 突破 TCP 限制,三者共同推动 Web 性能与安全的演进。

VHDL

D触发器

奇偶校验电路

百词斩

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/900053.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于双PI控制的永磁同步电机变频调速系统simulink建模与仿真

1.课题概述 基于双PI控制的永磁同步电机变频调速系统simulink建模与仿真。2.系统仿真结果 (完整程序运行后无水印)3.核心程序与模型 版本:MATLAB2022a4.系统原理简介基于双PI控制的永磁同步电机(PMSM)变频调速系统是一种高效的电机控制策略,它利用两个独立的PI控制器分别控…

DeepSeek+Claude强强联手,使用AI驱动DjangoStarter 3.1框架升级

前言 上个月底培训了一周就没时间更新博客 上周有一些空闲时间,就继续体验最近很火的AI辅助编程 之前的文章中有说到我配置好了 VSCode + Cline 插件搭配本地部署的 DeepSeek 来实现AI辅助编程参考: 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案但 Cline 插件消耗…

20243426 实验一《Python程序设计》实验报告

课程:《Python程序设计》 班级: 2434 姓名: 樊泽睿 学号:20243426 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序,并进行调试分析,要有过程) 3.编写程序,练习变量…

第01章 数据库概述

第01章 数据库概述 1. 为什么要使用数据库持久化 (Persistence): 把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以“固化”,而持久化的实现过程大多通过各种关系数据库来完成。 持久化的主要作…

【每日一题】20250316

【每日一题】曲线 \(\displaystyle y=3(x^2+x-\sqrt{4x^2+3})e^{-2x^2}\) 在点 \((-1,0)\) 处的切线方程为_________.如图所示,取一段长为 \(12\) 的绳子,如果把这段绳子的两个端点分别固定在画图板上不同的两点 \(F_1\) 和 \(F_2\) 处,当绳长大于 \(F_1\) 和 \(F_2\) 之间…

foobar2000 v2.24.3 汉化版

foobar2000 v2.24.3 汉化版 -----------------------【软件截图】---------------------- -----------------------【软件介绍】---------------------- foobar2000 是一个 Windows 平台下的高级音频播放器.包含完全支持 unicode 及支持播放增益的高级标签功能. 特色: * 支持的…

拉格朗日插值算法

首先介绍下作用 在平面上给定 n 个点,求一条多项式图像穿过所有的点 (每个点横坐标不同)由浅入深,首先想一个悬浮点 1 ,它在除 1 以外给定的点的横坐标上函数值都是 0 。已知它的横坐标 \(x_1\) , 怎么用函数图像表示 我们一拍脑袋发现,可以这么表示 \[f1(x) = \prod_{i =…

本地部署Gemma3模型

本地部署Gemma3模型 1. 拉取并运行 Ollama 容器 # 拉取 Ollama 镜像 docker pull ollama/ollama# 运行 Ollama 容器 docker run -d --gpus all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama2. 进入容器并部署 Gemma3 模型(默认4B版 ) # 进入 Ollama 容…

Anaconda中启动Jupyter lab的方法

Anaconda中启动Jupyter lab的方法: 1、在Anaconda Prompt中,使用命令来启动:jupyter lab 2、在Anaconda界面中点击Jupyter lab下方的launch按钮启动,如下图所示:

React+Next.js+MaterialUI+Toolpad技术栈学习——安装

今天跟大家分享一个React+Next.js+MaterialUI技术栈的前端框架Toolpad。相关资源MaterialUI Toolpad框架效果安装运行安装命令npx create-toolpad-app@latest your-app cd your-app npm run dev文件结构 无身份认证 ├── app │ ├── (dashboard) │ │ ├── layou…

测试驱动开发(TDD)浅析

测试驱动开发(TDD:Test Driven Development)是敏捷开发中的一项核心实践,推崇通过测试来驱动整个开发的进行。TDD有别于传统“先编码,后测试”的开发过程,而是要求在编写业务代码之前,先编写测试用例。TDD的概念大致在上世纪90年代随着极限编程(XP:Extreme Programmin…

(18).命令模式

命令模式 命令模式的核心思想是将请求封装为个对象,将其作为命令发起者和接收者的中介,而抽象出来的命令对象又使得能够对一系列请求进行操作,如对请求进行排队,记录请求日志以及支持可撤销的操作等。命令模式参与者:◇命令的执行者(接收者Receiver):它单纯的只具体实现了功…