HTTP——不同版本区别

目录

HTTP1.0和HTTP1.1的区别

HTTP1.1相比HTTP1.0性能上的改进:

但是HTTP1.1还是有性能瓶颈:

HTTP/2做了什么优化?

HTTP/3的优点

HTTP与HTTPS的区别

HTTPS的工作原理

1.ClientHello

2.ServerHello

3.客户端回应

4.服务器的最后回应

三、三者协同作用:确保密钥安全的核心逻辑

TCP与UDP的区别

1.连接

2.服务对象

3.可靠性

4.拥塞控制,流量控制

5.首部开销


HTTP1.0和HTTP1.1的区别

HTTP1.1相比HTTP1.0性能上的改进:

使用长连接的方式改善了HTTP1.0短链接的性能开销。

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

但是HTTP1.1还是有性能瓶颈:

  • 请求/响应头部(header)未经压缩就发送,首部信息越多延迟越大。只能压缩Body部分;
  • 发送冗长的首部。每次互相发送相同的首部造成的浪费较多;
  • 服务器是按请求的顺序响应的,如果服务器响应慢,会导致客户端一直请求不到数据,也就是对头阻塞;
  • 没有请求优先级控制;
  • 请求只能从客户端开始,服务器只能被动响应。

HTTP/2做了什么优化?

HTTP/2协议是基于HTTPS的,所以HTTP/2的安全性也有保障的。

那HTTP/2相比HTTP/1.1性能上的改进:

  • 头部压缩
  • 二进制格式
  • 并发传输
  • 服务器主动推送资源

1.头部压缩:HTTP/2会压缩头(header)如果你同时发出多个请求,他们的头是一样的或相似的,那么,协议会帮你消除重复的部分。这就是所谓的HPACK算法:在客户端和服务器同时维护一张头信息表,所有的字段都会存入这个表,生成一个索引号,以后就不发送同样的字段了,只发送索引号,这就提高速度了。

2.二进制格式:HTTP/2不在像HTTP1.1里的纯文本形式的报文,而是全面采用了二进制格式,头信息和数据体都是二进制,并且统称为帧:头信息帧和数据帧。这样虽然对人不友好,但是对计算机非常友好,因为计算机只懂二进制,那么接收到报文后,无需再将明文的报文转成二进制,而是直接解析二进制报文,这增加了数据传输的效率。

3.并发传输:引出了Stream的概念,多个Stream复用在一条TCP连接。解决了HTTP1.1对头阻塞的问题;

4.服务器主动推送资源:HTTP/2还在一定程度上改善了传统的请求-应答模型,服务端不再是被动的响应,可以总动像客户端发送消息

在 HTTP/2 中,多个请求的帧在同一个 TCP 连接上传输,若某个请求的帧在传输过程中丢失或延迟,导致接收方无法按序接收,就会阻塞该连接上所有请求帧的接收和处理。

HTTP/3的优点

HTTP/2通过头部压缩,二进制编码,多路复用,服务端推送等新特性大幅度提升了HTTP/1.1的性能,而美中不足的是HTTP/2协议是基于TCP实现的,于是存在三个缺陷。

  • 对头阻塞
  • TCP与TLS的握手延迟
  • 网络迁移需要重新连接;

因为TCP是字节流协议,TCP层必须保证收到的字节数据是完整且有序的,如果我序列号较低的TCP段在网络传输中丢失了,即使序列号较高的TCP段已经被接收了,应用层无法从内核中读取到这部分数据

网络迁移需要重新连接:一个TCP由四元组(元ip地址,源端口,目标ip地址,目标端口)确定的,这意味着如果我ip地址或者端口变动了就要tcp与tls从新握手,这样不利于移动设备切换网络的场景,比如4g网络环境切换成wifi。

HTTP/3就将传输层从TCP替换成了UDP,并在UDP协议上开发了QUIC协议,来保证数据的可靠传输。

无对头阻塞,QUIC连接上多个Stream之间并没有依赖,都是独立的,也不会由底层协议限制,某个流发送丢包了,只会影响该流,其他流不受影响;

建立连接速度快,因为QUIC内部包含了TLS1.3因此只需要1个RTT就可以同时完成建立连接和TLS密钥协商,甚至第二次连接的时候,应用数据包可以和QUIC握手信息

连接迁移

QUIC 支持通过连接 ID 保持会话,即便 IP 地址或网络切换(如 Wi - Fi 转 4G),连接仍然有效。这种特性特别适用于移动场景,能确保数据连接的稳定性,极大改善了移动设备用户的体验。

HTTP与HTTPS的区别

  • HTTP是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS则解决了HTTP不安全的缺陷,在TCP和HTTP网络层之间加入了SSL/TLS安全协议,使得报文能够加密传输。
  • HTTP连接建立相对简单,TCP三次握手之后便可进行HTTP的报文传输。而HTTPS在TCP三次握手之后,还需进行SSL/TLS的握手过程,才可进入加密报文传输。
  • 两者默认的端口不一样,HTTP默认端口号是80,HTTPS默认端口号是443.
  • HTTPS协议需要先AC(证书权威机构)申请数字证书,来保证服务器的身份是可行的。

HTTPS的工作原理

1.ClientHello

首先,由客户端向服务器发起加密通信请求,也就是ClientHello请求。在这一步,客户端主要向服务器发送以下信息:

  • 客户端支持的SSL/TLS协议版本,如TLS1.2版本
  • 客户端生产的随机数Client Random,后面用于生产【会话密钥】
  • 客户端支持的密码套件列表,如RSA加密算法。

2.ServerHello

服务器收到客户端请求后,向往客户端发出响应,也就是SeverHello。服务器回应的内容有如下内容:

  • 确认SSL/TLS协议版本,如果浏览器不支持,则关闭加密通信。
  • 服务器生产的随机数(Server Random),后面用于生产【会话密钥】
  • 确认的密码套件列表,如RSA加密算法
  • 服务器的数字证书

3.客户端回应

客户端收到服务器的回应后,首先通过浏览器或者操作系统中的CA公钥,确认服务器的数字证书的真实性。

如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:

  • 一个随机数。该随机数会被服务器公钥加密
  • 加密通信算法改变通知,表示随后的信息都将用【会话密钥】加密通信
  • 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时把之前所有内容的发送的数据做个摘要,用来供服务端校验。

上面第一项的随机数是整个握手阶段的第三个随机数,这样服务器和客户端就同时有三个随机数,接着用双方协商的加密算法,各自生成本次通信的【会话密钥】。

4.服务器的最后回应

服务器收到客户端的第三个随机数之后,就通过协商的加密算法,计算出本次通信的【会话密钥】。然后,向客户端发送最后的信息:

  • 加密通信算法改变通知,表示随后的信息都将用【会话密钥】加密通信
  • 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供客户端校验。

至此,整个SSL/TLS的握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的HTTP协议,只不过使用【会话密钥】加密内容。

三、三者协同作用:确保密钥安全的核心逻辑

  1. 随机性叠加
    三个随机数的组合(ClientRandom + ServerRandom + Pre-Master Secret)形成 高熵值的密钥材料,即使其中一个随机数被泄露,攻击者也无法推导出完整密钥(需同时破解三个随机数)。

  2. 防止重放攻击
    每次通信的随机数唯一,即使攻击者截获旧通信数据,也无法用旧随机数重新生成当前会话的密钥。

  3. 双向验证与密钥协商

    • 客户端和服务端通过随机数确认对方的参与(确保不是单向伪造)。
    • 预主密钥的安全传输(如通过服务端公钥加密)确保只有合法通信双方能计算出主密钥。

TCP与UDP的区别

1.连接

  • TCP是面向连接的传输层协议,传输数据前先要建立连接。
  • UDP是不需要连接,即刻传输数据。

2.服务对象

  • TCP是一对一的两点服务,即一条连接只有两个端点。
  • UDP支持一对一,一对多,多对多的交互通信。

3.可靠性

  • TCP是可靠交付数据的,数据可以无差错,不丢失,不重复,按序到达。
  • UDP是尽最大努力交付,不保证可靠交付数据。但是我们可以基于UDP传输协议实现一个可靠的传输协议,比如QUIC协议。

4.拥塞控制,流量控制

  • TCP有拥塞控制和流量控制机制,保证数据传输的安全性。
  • UDP则没有,即使网络非常拥堵了,也不会影响UDP的发生速率。

5.首部开销

  • TCP首部长度较长,会有一定的开销。
  • UDP首部只有8个字节,并且是固定不变的,开销较小。

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

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

相关文章

关于M0+芯片的IAP应用导致延时不准确解释

前言:在给项目中使用的M0芯片做IAP功能时一切一切都是那么的自然水到渠成,但是笔者在实现完IAP功能后,却发现APP端挂载的单总线功能崩溃了,最开始没有怀疑是bootload导致的。因为笔者在使用同一篇代码的时候单总线挂载的设备不同&…

安卓登录学习笔记

1. 背景与目标 (Background and Goal) 背景: 我们要创建一个用户登录界面。用户输入用户名和密码,点击“登录”按钮。应用会显示一个加载中的“圈圈”(ProgressBar),然后模拟一个耗时2秒的网络请求。根据请求结果,界面…

Git(三):分支管理

文章目录 Git(三):分支管理理解分支创建分支切换分支合并分支删除分支合并冲突分支管理策略分支策略Bug分支删除临时分支 Git(三):分支管理 理解分支 本章介绍Git的杀手级功能之一:分支 分支就 是科幻电影里面的平行宇宙,当你正…

电子电气架构 --- 电气架构基础(汽车电子)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

RestClient 功能介绍、完整使用示例演示, 和RestTemplate、WebClient 对比

RestClient功能介绍 RestClient是Spring Framework 6.1版本引入的同步HTTP客户端,旨在替代老旧的RestTemplate,提供更现代、流畅的API设计。其核心特点包括: 流畅API(Fluent API): 支持链式调用&#xff0…

VM经常遇见的运行慢几种情况、以及设置方法

大家好,我是东哥说-MES 启动虚拟机是提示如下内容 “无法打开内核设备“\.\VMCIDev\VMX”: 操作成功完成。是否在安装 VMware Workstation 后重新引导? 模块“DevicePowerOn”启动失败。 未能启动虚拟机。” 2.用记事本打开安装目录下TIA Portal STEP7 Prof Safety WinCC …

【C++语法】类和对象(4)——日期类和const成员函数

6.类和对象&#xff08;4&#xff09; 文章目录 6.类和对象&#xff08;4&#xff09;回顾简单日期类的实现代码补充&#xff1a;前置与后置的重载区别补充&#xff1a;关于流插入运算符&#xff08;<<&#xff09;的解释拓展&#xff1a;仿照流插入操作符(<<)的作…

当凌晨的键盘声,遇见黎明的星光​

地铁玻璃映出你困倦的脸&#xff0c;耳机里的音乐循环到第 17 遍&#xff0c;早高峰的人群像沙丁鱼罐头般挤压着你。这是你每天雷打不动的三小时通勤路&#xff0c;从城市边缘到写字楼林立的 CBD&#xff0c;窗外的风景换了四季&#xff0c;而你始终困在摇晃的车厢里&#xff0…

Web Worker技术详解与应用场景

我们来详细探讨一下 Web Worker。它是现代 Web 开发中解决 JavaScript 单线程限制、提升应用性能和响应能力的关键技术。 核心问题&#xff1a;JavaScript 的单线程模型 浏览器 UI 线程&#xff08;主线程&#xff09;&#xff1a;JavaScript 在浏览器中默认运行在单个线程&a…

React Next快速搭建前后端全栈项目并部署至Vercel

很好&#xff0c;你是想搞清楚Next.js 的后端结构和传统 Node Express 的区别对比&#xff0c;我来整理一套结构化、精准、对面试有说服力的解答&#xff0c;并附示意结构图。 01Next vs Express 、## ⚡️1️⃣ Next.js 后端是怎么构建的 Next.js 在默认情况下本身就集成后…

【T宝客户项目解决过程】01-模型训练

1 项目需求描述 博主自己开了一家T宝店&#xff0c;有一个客户有这个需求&#xff1a;有一大堆图像&#xff0c;大概有10多万张图&#xff0c;都是比较小尺寸的图。各种类型都有&#xff0c;我们想要通过将不同类型发图像进行分开&#xff0c;如何实现呢&#xff1f; 2 思路 …

如何在中将网络改为桥接模式并配置固定IP地址

在使用服务器搭建虚拟机的过程中&#xff0c;我们发现有许多场景需要将虚拟机的网络配置为桥接模式&#xff0c;并为其设置固定的IP地址。为了帮助大家更高效地进行网络配置&#xff0c;提升虚拟机的连接稳定性和管理便捷性&#xff0c;我们总结了这篇指南&#xff0c;介绍如何…

强化学习 - 基于策略的Reinforce算法

&#x1f3af; REINFORCE 策略梯度算法推导&#xff08;完整&#xff09; 1. 目标函数定义 我们希望最大化策略的期望回报&#xff1a; J ( θ ) E τ ∼ π θ [ R ( τ ) ] J(\theta) \mathbb{E}_{\tau \sim \pi_\theta} \left[ R(\tau) \right] J(θ)Eτ∼πθ​​[R(τ…

Windows Sever Core安装及常用命令

一、Windows Sever Core 在安装 Windows Server 的过程中&#xff0c;可以选择“Server Core”&#xff08;核心安装&#xff09;这种没有图形用户界面&#xff08;GUI&#xff09;的安装方式。这种模式下&#xff0c;Windows Server 主要通过命令行或远程管理进行配置和维护&…

Java 单元测试实战:以“两数之和”为例,讲透测试思维

&#x1f31f;Java 单元测试实战&#xff1a;以“两数之和”为例&#xff0c;讲透测试思维 在 Java 开发中&#xff0c;单元测试不仅是验证功能正确的手段&#xff0c;更是衡量开发者是否具备“测试思维”的标志。今天我们通过一个最简单的功能——“两数之和”来系统讲解如何…

Bootstrap 5学习教程,从入门到精通,Bootstrap 5 提示框(Tooltips) 语法知识点及案例(21)

Bootstrap 5 提示框(Tooltips) 语法知识点及案例 一、提示框语法知识点 1. 基本概念 提示框(Tooltips)是当用户悬停在元素上时显示的小浮动标签&#xff0c;用于提供额外信息。 2. 核心属性 data-bs-toggle"tooltip" - 标识元素为提示框触发器title - 提示框显示…

设计模式实战指南:从源码解析到Java后端架构的艺术

&#x1f3af; 设计模式实战指南&#xff1a;从源码解析到Java后端架构的艺术 概述 本文档基于设计模式分类&#xff0c;详细介绍Java后端开发中各种设计模式的实际应用场景&#xff0c;结合Spring、MyBatis、Redis等主流框架的源码分析&#xff0c;帮助开发者深入理解设计模…

Python Arrow 库详解:更智能的日期时间处理

1. 安装与基本用法 安装 Arrow pip install arrow基本使用示例 import arrow# 获取当前时间 now arrow.now() print(now) # 输出: 2023-07-15T14:30:45.12345608:00# 创建特定时间 dt arrow.get(2023-07-15 14:30:00, YYYY-MM-DD HH:mm:ss) print(dt) # 输出: 2023-07-15T…

大家电破渠道困局,小家电攻用户体验,云徙有何解法?

中国家电行业正经历深刻转型。 自2018年市场规模触及8400亿顶峰后&#xff0c;行业从增量竞争转向存量博弈。与此同时&#xff0c;线上渠道在2023年首次以58%的占比超越线下&#xff0c;其中扫地机器人等小家电品类线上渗透率突破90%。消费需求也在同步重构——从家庭场景向个…

DMDPC多副本数据分布测试

需求&#xff1a;测试建表和插入数据是否会根据分布列进行自动分发。 验证方法&#xff1a;1&#xff09;准备基础环境&#xff1a;创建用户和表空间。2&#xff09;创建数据分布测试表&#xff0c;并插入数据。3&#xff09;查询指定分区数据&#xff0c;验证数据分布情况。 …