HTTP/2 与 HTTP/3 的新特性
一、引言
在互联网蓬勃发展的浪潮中,HTTP 协议作为网络通信的基石,历经多次迭代升级,不断推动着网络传输效率与性能的提升。从最初简单的 HTTP/0.9 版本,仅能实现基本的文本传输,到 HTTP/1.0 引入多种请求方法与头部信息,再到 HTTP/1.1 通过长连接、管线化等技术优化传输性能,HTTP 协议逐步适应了日益复杂的网络需求。
然而,随着移动互联网、高清视频、在线游戏等应用的爆发式增长,对网络传输的速度、延迟和稳定性提出了更高要求。HTTP/2 与 HTTP/3 应运而生,它们带来的一系列新特性,如 HTTP/2 的二进制分帧、多路复用、头部压缩、服务器推送,以及 HTTP/3 基于 QUIC 协议的 UDP 传输、更好的多路复用、加密和安全性提升等,彻底革新了网络传输模式,显著改善了用户体验,成为推动互联网发展的关键力量。 深入了解这些新特性,对于开发者优化网络应用、提升服务质量具有重要意义。
二、HTTP/2 新特性深度剖析
2.1 二进制分帧层
HTTP/2 引入了二进制分帧层,这是其性能提升的核心所在。在 HTTP/2 中,不再像 HTTP/1.x 那样以文本形式传输数据,而是将所有传输的信息,包括请求和响应的头部、消息主体等,分割为更小的帧,并采用二进制格式进行编码。在一个典型的 Web 应用场景中,当客户端请求一个包含 HTML、CSS 和 JavaScript 文件的网页时,这些资源在 HTTP/2 协议下会被分别拆分成多个帧。例如,HTML 文件的头部信息可能被封装在一个 HEADERS 帧中,而其主体内容则被分割成多个 DATA 帧;CSS 和 JavaScript 文件也会类似地被拆分成相应的帧。每个帧都有一个固定长度的头部,包含长度、类型、标志和流标识符等信息,用于标识该帧所属的数据流以及其在传输过程中的相关属性。通过这种方式,客户端和服务器能够更高效地解析和处理数据,大大提升了传输效率与灵活性。 同时,二进制格式相较于文本格式,在数据传输过程中占用的带宽更少,也不易出错,从而提高了数据传输的可靠性。
2.2 多路复用
多路复用是 HTTP/2 的一项关键特性,它允许在同一个 TCP 连接上并发处理多个请求和响应。在 HTTP/1.x 中,一个 TCP 连接在同一时间内只能处理一个请求 - 响应序列,若当前请求处理缓慢或传输大量数据,后续请求就必须排队等待,这就是所谓的队首阻塞问题。这就好比在一条单车道的道路上,车辆必须依次行驶,一旦前面的车辆出现故障或行驶缓慢,后面的车辆都将被堵塞。
而 HTTP/2 通过引入流(Stream)和帧(Frame)的概念解决了这一问题。每个流都有一个唯一的标识符,用于区分同一连接上的不同流,每个流可以承载多个消息,而消息又由一个或多个帧组成。来自不同流的帧可以交错发送,然后在接收端根据帧头部的流标识符重新组装。这样,在一个 TCP 连接上可以同时传输多个请求和响应的帧,实现了真正的并发处理。假设一个网页需要加载多个图片、CSS 文件和 JavaScript 文件,在 HTTP/2 下,这些资源的请求和响应帧可以在同一个 TCP 连接上并行传输,互不干扰,大大提升了网络利用率与页面加载速度,同时也减少了建立和维护多个 TCP 连接的开销。
2.3 头部压缩(HPACK)
HTTP/1.x 中,每次请求都需要携带大量冗余的头部信息,这在一定程度上浪费了网络带宽。HTTP/2 采用了 HPACK 算法来压缩头部,有效减少了传输开销。HPACK 算法主要通过静态表、动态表和霍夫曼编码来实现头部压缩。静态表包含了一系列预定义的常见头部字段和值,在传输过程中,如果头部字段和值在静态表中存在,只需发送对应的索引值,而无需传输完整的字段和值。动态表则用于存储在连接过程中动态出现的头部字段和值,客户端和服务器会根据实际情况动态更新动态表。对于那些无法在静态表和动态表中找到匹配的头部字段和值,则会使用霍夫曼编码进行压缩,以进一步减小传输大小。在一个频繁请求同一服务器的 Web 应用中,许多头部字段如 User - Agent、Accept 等往往是不变的。在 HTTP/2 下,首次请求时这些字段会被记录到动态表中,后续请求只需发送对应的索引值,大大减少了头部传输的字节数,提升了传输性能。
2.4 服务器推送
服务器推送是 HTTP/2 的一项强大功能,它允许服务器在客户端请求之前,主动将客户端可能需要的资源推送给客户端。这一机制基于流的概念实现,服务器可以在处理客户端请求的过程中,通过创建新的流将相关资源发送给客户端。以一个电商网站为例,当用户请求商品详情页时,服务器不仅返回 HTML 页面,还可以主动推送该页面所依赖的 CSS 文件、JavaScript 文件以及一些关键的图片资源。这样,客户端在接收到 HTML 页面后,无需再额外发送请求去获取这些资源,大大减少了客户端的请求次数和等待时间,加速了页面的加载速度,提升了用户体验。同时,服务器推送还可以更好地利用网络带宽,避免了客户端因等待资源而造成的带宽闲置。
2.5 数据流优先级
HTTP/2 允许为不同的数据流分配优先级,通过控制 CPU、内存和带宽等资源的分配,确保关键资源优先传输。在一个复杂的网页中,可能包含多种类型的资源,如 HTML、CSS、JavaScript、图片、视频等。其中,HTML 和 CSS 文件对于页面的初步渲染至关重要,而 JavaScript 文件可能会影响页面的交互功能,图片和视频则可能在后续用户浏览过程中起到重要作用。通过为这些资源对应的数据流设置不同的优先级,例如将 HTML 和 CSS 的数据流优先级设置为最高,JavaScript 次之,图片和视频较低,服务器可以优先处理和传输优先级高的数据流,确保页面能够尽快呈现给用户,关键功能能够尽快可用,从而提升用户体验。即使在网络带宽有限的情况下,也能保证重要资源的及时传输。 同时,不同的浏览器对于数据流优先级的实现方式略有不同,如 Chrome 在每个资源上使用独占位,根据资源优先级构建资源链;Firefox 构建虚拟的数据流树,对不同请求类型分组并加权 ,这些实现方式都旨在更好地利用数据流优先级特性,优化资源传输。
三、HTTP/3 新特性全面解析
3.1 基于 QUIC 协议的传输
HTTP/3 放弃了沿用已久的 TCP 协议,转而采用基于 UDP 的 QUIC(Quick UDP Internet Connections)协议 ,这一转变旨在解决 TCP 协议在现代网络环境下的诸多局限性。TCP 协议虽然提供了可靠的传输保障,但在建立连接时,需要通过三次握手来确认双方的连接状态,这一过程会引入一定的延迟。特别是在移动网络等对延迟敏感的场景中,这种延迟会严重影响用户体验。而 QUIC 协议则通过减少握手时延,使用 0-RTT(零往返时间)机制,允许在连接初始化阶段就发送数据,大大降低了连接建立的延迟。
在 QUIC 协议中,客户端和服务器在首次连接时,会通过交换特定的握手包来协商连接参数和加密密钥。在这个过程中,客户端可以在发送握手包的同时,将部分应用数据一并发送出去。服务器在收到握手包和数据后,会进行相应的处理,并返回响应。通过这种方式,QUIC 协议避免了传统 TCP 三次握手带来的延迟,实现了更快的数据传输。以移动支付场景为例,用户在使用手机进行支付时,HTTP/3 基于 QUIC 协议的快速连接建立机制,能够让支付请求迅速发送到服务器,减少用户等待支付结果的时间,提升支付的流畅性和便捷性。
3.2 多路复用与无队头阻塞
在 HTTP/2 中,虽然已经引入了多路复用技术,但由于其仍然依赖 TCP 协议进行传输,在 TCP 层面上仍存在队头阻塞的问题。TCP 协议为了保证数据的有序传输,当一个数据包丢失时,会暂停所有后续数据包的传输,直到丢失的数据包被重新传输并确认。这就好比在一条高速公路上,某个路段发生了事故,导致后面的车辆都无法通行,即使其他车道是畅通的。
而 HTTP/3 在 QUIC 协议上原生支持多路复用,并且每个流可以独立传输和确认,从而彻底消除了队头阻塞问题。在 HTTP/3 中,多个数据流可以在同一个连接上并发传输,每个数据流都有自己独立的编号和状态。当某个数据流中的数据包丢失时,只会影响该数据流的传输,而不会对其他数据流造成任何影响。例如,在一个同时加载多个图片和视频的网页中,若其中一个图片的数据流出现丢包情况,HTTP/3 能够确保其他图片和视频的数据流继续正常传输,用户不会因为某个资源的加载问题而等待整个页面的加载,大大提高了页面的加载速度和用户体验。
3.3 连接迁移
QUIC 协议允许在 IP 地址变化的情况下保持连接状态,这一特性对于移动设备或者网络环境发生变化时的连接持久性至关重要。在传统的 TCP 连接中,连接是通过源 IP 地址、源端口、目标 IP 地址和目标端口这四元组来标识的。当设备的网络环境发生变化,如从 Wi-Fi 切换到移动数据,或者在不同的 Wi-Fi 热点之间切换时,IP 地址会发生改变,这就导致 TCP 连接被迫中断,需要重新建立连接。这不仅会引入额外的延迟,还可能导致正在进行的数据传输中断,影响用户体验。
而在 HTTP/3 中,QUIC 连接是由连接 ID(Connection ID)来标识的,而不是传统的 IP 地址加端口号。连接 ID 在连接建立时生成,并且在整个连接过程中保持不变。当设备的网络环境发生变化,IP 地址改变时,只要连接 ID 不变,QUIC 连接就能够保持稳定,无需重新建立连接。以用户在乘坐地铁时使用手机观看在线视频为例,地铁在行驶过程中会频繁切换基站,导致手机的 IP 地址不断变化。在 HTTP/3 的支持下,视频播放应用可以通过 QUIC 协议的连接迁移特性,保持视频流的稳定传输,用户不会因为网络切换而出现视频卡顿或中断的情况,极大地提升了用户体验。
3.4 内置加密
QUIC 协议将 TLS 加密集成到了协议栈中,使得每个新的 QUIC 连接都能快速并且安全地建立起来。在传统的网络传输中,TCP 协议与 TLS 加密是分层实现的,在建立连接时需要分别进行 TCP 握手和 TLS 握手,这增加了连接建立的复杂性和延迟。而 QUIC 协议通过将 TLS 加密集成到自身协议栈中,简化了安全实现过程。
在 QUIC 协议中,TLS 握手与连接建立过程紧密结合。当客户端发送握手包时,其中就包含了 TLS 握手所需的信息。服务器在收到握手包后,能够快速完成 TLS 握手过程,实现数据的加密传输。同时,QUIC 协议可以针对每个流独立执行加密操作,进一步提高了数据传输的安全性。例如,在一个在线银行应用中,用户的账户信息、交易记录等敏感数据在传输过程中,HTTP/3 通过 QUIC 协议的内置加密功能,对每个数据流进行独立加密,确保数据不会被窃取或篡改,保障了用户的资金安全和隐私。
3.5 更快的错误恢复
QUIC 协议提供了更高效的重传机制,能够更快地检测和恢复丢包,特别是在无线网络环境下表现更为出色。在无线网络中,由于信号干扰、网络拥塞等原因,数据包丢失的情况较为常见。TCP 协议在检测到丢包后,需要等待一定的时间来确认数据包是否真的丢失,然后再进行重传,这一过程会导致数据传输的延迟增加。
而 QUIC 协议通过使用冗余的确认机制和快速重传算法,能够在数据包丢失后迅速检测到,并立即进行重传。QUIC 协议会为每个数据包分配一个唯一的标识符,接收方在收到数据包后会及时发送确认信息。当发送方发现某个数据包的确认信息超时未收到时,会立即重传该数据包。同时,QUIC 协议还支持前向纠错(FEC)技术,通过在发送数据时添加一些冗余信息,接收方可以利用这些冗余信息在一定程度上恢复丢失的数据包,而无需等待重传。这在无线网络环境下,能够有效减少数据传输的延迟,保障数据传输的可靠性。例如,在户外使用移动设备进行视频直播时,HTTP/3 的 QUIC 协议能够快速应对无线网络中的丢包情况,确保直播画面的流畅性和稳定性,为观众带来更好的观看体验。
四、HTTP/2 与 HTTP/3 应用场景及性能对比
4.1 应用场景分析
HTTP/2 在现有 TCP 基础设施场景中具有显著优势。由于它基于 TCP 协议,与大多数网络设备和服务器兼容良好,无需对网络基础设施进行大规模改造即可部署 。在传统的 Web 应用中,如企业官网、资讯类网站等,HTTP/2 的二进制分帧、多路复用和头部压缩等特性能够有效提升页面加载速度,减少用户等待时间。当用户访问一个包含大量图片、CSS 和 JavaScript 文件的企业官网时,HTTP/2 通过多路复用技术,在同一个 TCP 连接上并发传输这些资源,大大提高了传输效率。同时,头部压缩技术减少了头部信息的传输量,进一步优化了传输性能。
HTTP/3 则在对延迟和稳定性要求极高的场景中表现出色,如实时通信、在线游戏等领域。在实时视频通话中,HTTP/3 基于 QUIC 协议的快速连接建立和无队头阻塞特性,能够确保视频流的稳定传输,即使在网络状况不佳的情况下,也能有效减少卡顿和延迟,保证通话的流畅性。在在线游戏中,玩家的操作指令需要及时准确地传输到服务器,同时服务器也要快速反馈游戏状态给玩家。HTTP/3 的连接迁移特性使得玩家在移动过程中,即使网络环境发生变化,如从 Wi-Fi 切换到移动数据,游戏连接也能保持稳定,不会出现中断或延迟大幅增加的情况,为玩家提供了更加流畅和稳定的游戏体验。
4.2 性能对比
在连接建立时间方面,HTTP/2 基于 TCP 协议,需要进行三次握手来建立连接,并且在建立连接后还需要进行 TLS 加密协商,这一过程会引入一定的延迟。而 HTTP/3 采用 QUIC 协议,通过减少握手时延,使用 0-RTT 机制,允许在连接初始化阶段就发送数据,大大降低了连接建立的时间。据相关测试数据表明,在相同网络环境下,HTTP/3 的连接建立时间相比 HTTP/2 平均减少了约 30% - 50%,这在对实时性要求较高的应用场景中具有重要意义。
传输效率上,HTTP/2 的多路复用技术虽然允许多个请求和响应在同一个 TCP 连接上并发传输,但由于 TCP 协议本身的特性,当某个数据包丢失时,会导致队头阻塞,影响其他数据包的传输。而 HTTP/3 在 QUIC 协议上原生支持多路复用,并且每个流可以独立传输和确认,彻底消除了队头阻塞问题。在一个同时加载多个大型文件的场景中,HTTP/3 能够更高效地利用网络带宽,实现更快的数据传输,相比 HTTP/2,文件的整体下载时间可缩短约 20% - 40%。
在应对丢包情况时,HTTP/2 依赖 TCP 的重传机制,当检测到丢包后,需要等待一定时间确认,然后再进行重传,这会导致数据传输的延迟增加。而 HTTP/3 的 QUIC 协议通过冗余的确认机制和快速重传算法,能够迅速检测到丢包并立即进行重传。同时,QUIC 协议支持的前向纠错(FEC)技术,能在一定程度上恢复丢失的数据包,无需等待重传。在无线网络环境下,HTTP/3 的丢包恢复能力明显优于 HTTP/2,例如在 4G 网络中,当丢包率达到 5% 时,HTTP/3 的视频播放卡顿次数相比 HTTP/2 减少了约 60%,有效提升了用户体验。
五、总结与展望
HTTP/2 与 HTTP/3 的新特性为网络传输带来了质的飞跃。HTTP/2 的二进制分帧、多路复用、头部压缩等特性,显著提升了数据传输效率与性能;HTTP/3 基于 QUIC 协议,在连接建立、多路复用、丢包恢复等方面实现了重大突破,尤其适用于对延迟和稳定性要求极高的场景。
展望未来,随着 5G 网络的普及、物联网设备的爆发式增长以及人工智能应用的不断深入,对网络传输的性能和可靠性提出了更高的要求。HTTP 协议有望继续演进,进一步提升传输效率、安全性和用户体验。未来的 HTTP 协议可能会更加紧密地与新兴技术融合,如边缘计算、区块链等,为构建更加智能、高效、安全的网络环境奠定基础。 开发者应密切关注 HTTP 协议的发展动态,充分利用这些新特性,不断优化网络应用,为用户提供更加优质的服务 。
相关文章:
HTTP/2 与 HTTP/3 的新特性
一、引言 在互联网蓬勃发展的浪潮中,HTTP 协议作为网络通信的基石,历经多次迭代升级,不断推动着网络传输效率与性能的提升。从最初简单的 HTTP/0.9 版本,仅能实现基本的文本传输,到 HTTP/1.0 引入多种请求方法与头部信…...
【软件开发过程管理规范】需求管理,需求分析,设计开发管理,测试管理(Word)
一、需求管理规程 1 简介 2 过程总体描述 2.1 过程概述 2.2 过程流程图 3 过程元素描述 3.1 准备阶段 3.2 需求调研 3.3 需求分析 软件开发人员及用户往往容易忽略信息沟通,这导致软件开发出来后不能很好地满足用户的需要,从而造成返工。而返工不仅在技术…...
mysql的主从配置
#mysql数据库 #主从 MySQL数据库主从配置 1.MySQL主从介绍 MySQL 主从又叫做 Replication、AB 复制。简单讲就是 A 和 B 两台机器做主 从后,在 A 上写数据,另外一台 B 也会跟着写数据,两者数据实时同步的。 MySQL 主从是基于 binlog 的&…...
debian中apt的配置与解析
引言 在系统使用过程中,我们可能会遭遇 apt update 操作出现问题,或者 apt upgrade 速度迟缓的情况。这往往是由于所使用软件源本身存在诸如服务器性能不佳、维护不及时等质量问题,同时,软件源服务器与我们所处地理位置的距离较远…...
Python Pyside6 加Sqlite3 写一个 通用 进销存 系统 初型
图: 说明: 进销存管理系统说明文档 功能模块 1. 首页 显示关键业务数据商品总数供应商总数本月采购金额本月销售金额显示预警信息库存不足预警待付款采购单待收款销售单2. 商品管理 商品信息维护商品编码(唯一标识)商品名称规格型号单位分类进货价销售价库存数量预警…...
Java工程结构:服务器规约(JVM 碰到 OOM 场景时输出 dump 信息、设置tomcat的 JVM 的内存参数、了解服务平均耗时)
文章目录 I 调用远程操作必须有超时设置。II 推荐了解每个服务大致的平均耗时JVM 的 Xms 和 Xmx 设置一样大小的内存容量让 JVM 碰到 OOM 场景时输出 dump 信息调大服务器所支持的最大文件句柄数(File Descriptor,简写为 fd)高并发服务器建议调小 TCP 协议的 time_wait 超时…...
Spring经典面试题
在Spring的面试中,经常会被问到一些经典的问题,这些问题涵盖了Spring的基本概念、核心特性、工作原理以及在实际项目中的应用。以下是一些Spring面试中最经典的题目: 一、Spring概述 什么是Spring框架?Spring框架有哪些主要模块&…...
以太网实战AD采集上传上位机——FPGA学习笔记27
一、设计目标 使用FPGA实现AD模块驱动采集模拟电压,通过以太网上传到电脑上位机。 二、框架设计 数据位宽转换模块(ad_10bit_to_16bit):为了方便数据传输,数据位宽转换模块实现了将十位的 AD 数据转换成十六位&#…...
数据结构与算法整理复习(一):数据结构概念与线性表
目录 第一章:绪论 1.1 数据结构的基本概念 1.2 算法与算法评价 第二章:线性表 2.1 线性表的定义和基本操作 2.2 线性表的顺序表示(顺序表) 应用题 2.3 线性表的链式表达(链表) 2.3.1 单链表 2.3.2…...
虚幻商城 Fab 免费资产自动化入库
文章目录 一、背景二、实现效果展示三、实现自动化入库一、背景 上一次写了个这篇文章 虚幻商城 Quixel 免费资产一键入库,根据这个构想,便决定将范围扩大,使 Fab 商城的所有的免费资产自动化入库,是所有!所有! 上一篇文章是根据下图这部分资产一键入库: 而这篇文章则…...
TCP Window Full是怎么来的
wireshark查看包时,会看到TCP Window Full,总结下它的特点: 1. Sender会显示 TCP Window Full 2. “Sender已发出,但,Receiver尚未ack的字节”,即Sender的 bytes in flights 3. Sender的 bytes in fligh…...
高效建站指南:通过Portainer快速搭建自己的在线网站
文章目录 前言1. 安装Portainer1.1 访问Portainer Web界面 2. 使用Portainer创建Nginx容器3. 将Web静态站点实现公网访问4. 配置Web站点公网访问地址4.1公网访问Web站点 5. 固定Web静态站点公网地址6. 固定公网地址访问Web静态站点 前言 Portainer是一个开源的Docker轻量级可视…...
“UniApp的音频播放——点击视频进入空白+解决视频播放器切换视频时一直加载的问题”——video.js、video-js.css
今天,又解决了一个单子“UniApp的音频播放——点击视频进入空白解决视频播放器切换视频时一直加载的问题” 一、问题描述 在开发一个基于 video.js 的视频播放器时,用户通过上下滑动切换视频时,视频一直处于加载状态,无法正常播放…...
如何让openhands始终输出中文?
在本地创建一个文件./user_prompt.j2 添加一行 Always respond in 中文你可以直接: echo "Always respond in 中文" > ./user_prompt.j2使用官方文档的docker命令启动容器时-v挂载一个文件/app/openhands/agenthub/codeact_agent/prompts/user_promp…...
CSS 溢出问题及解决方案:实用案例与技巧
在网页开发中,CSS 的布局和样式起着至关重要的作用,但经常会遇到一个棘手的问题——溢出问题。溢出是指元素内的内容超出了其设定的容器大小,这不仅会影响页面的美观,还可能干扰用户体验。本文将详细探讨 CSS 溢出问题的案例&…...
vue3使用音频audio标签
文章目录 一、背景二、页面三、标签介绍四、代码五、代码说明场景1:针对加载固定格式的比如MP3文件,可直接使用\<audio>标签场景2:针对播放告警内容,比如中文或者英文词条情况 一、背景 项目使用vue3,需求针对告…...
【useCallback Hook】在多次渲染中缓存组件中的函数,避免重复创建函数
文章目录 什么是 useCallback?基本语法 为什么需要 useCallback?示例1. 避免子组件重复创建函数2. 作为 useEffect 的依赖项 注意事项总结 在 React 开发中,性能优化是一个重要的主题。随着应用规模的增长,组件的重新渲染可能会变…...
Vue2+OpenLayers添加缩放、滑块缩放、拾取坐标、鹰眼、全屏控件(提供Gitee源码)
目录 一、案例截图 二、安装OpenLayers库 三、代码实现 四、Gitee源码 一、案例截图 二、安装OpenLayers库 npm install ol 三、代码实现 废话不多说,直接给完整代码,替换成自己的KEY即可运行: <template><div><div i…...
feign调用跳过HTTPS的SSL证书校验配置详解
一、问题抛出 如果不配置跳过SSL证书校验,当Feign客户端尝试连接到一个使用自签名证书的服务器时,可能会抛出类似以下的异常: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building faile…...
spring @EnableAspectJAutoProxy @Aspect的使用和源码流程
目录 测试代码EnableAspectJAutoProxyAspectJAutoProxyRegistrarAnnotationAwareAspectJAutoProxyCreatororg.springframework.context.support.AbstractApplicationContext#registerBeanPostProcessors 实例化AnnotationAwareAspectJAutoProxyCreator bean "a"的代理…...
项目实战--网页五子棋(游戏大厅)(3)
我们的游戏大厅界面主要需要包含两个功能,一是显示用户信息,二是匹配游戏按钮 1. 页面实现 hall.html <!DOCTYPE html> <html lang"ch"> <head><meta charset"UTF-8"><meta name"viewport"…...
『 实战项目 』Cloud Backup System - 云备份
文章目录 云备份项目服务端功能服务端功能模块划分客户端功能客户端模块划分 项目条件Jsoncpp第三方库Bundle第三方库httplib第三方库Request类Response类Server类Client类搭建简单服务器搭建简单客户端 服务端工具类实现 - 文件实用工具类服务器配置信息模块实现- 系统配置信息…...
【机器学习实战入门】使用OpenCV和Keras的驾驶员疲劳检测系统
嗜睡驾驶者警报系统 防止司机疲劳驾驶警报系统 中级 Python 项目 - 司机疲劳检测系统 疲劳检测是一种安全技术,能够预防因司机在驾驶过程中入睡而造成的事故。 本中级 Python 项目的目标是建立一个疲劳检测系统,该系统将检测到一个人的眼睛闭合了一段时…...
使用 spring boot 2.5.6 版本时缺少 jvm 配置项
2.5.6我正在使用带有版本和springfox-boot-starter版本的Spring Boot 项目3.0.0。我的项目还包括一个WebSecurityConfig扩展WebSecurityConfigurerAdapter并实现WebMvcConfigurer的类。但是,我面临的问题是指标在端点jvm_memory_usage_after_gc_percent中不可见/act…...
【强化学习】Soft Actor-Critic (SAC) 算法
📢本篇文章是博主强化学习(RL)领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅…...
2024年博客之星主题创作|Android 开发:前沿技术、跨领域融合与就业技能展望
目录 引言 一、推动 Android 应用创新的核心力量 1.1 人工智能与机器学习的崛起 1.2 增强现实(AR)与虚拟现实(VR)的应用扩展 1.3 5G技术的推动 1.4 跨平台开发技术的成熟 1.4.1 React Native 1.4.2 Flutter 1.4.3 Taro …...
Spring Boot--@PathVariable、@RequestParam、@RequestBody
目录 声明!! 什么是RESTful? RESTful 的基本原则 无状态性(Stateless) 统一接口(Uniform Interface) 分层系统(Layered System) 缓存(Cacheable&#…...
网站HTTP改成HTTPS
您不仅需要知道如何将HTTP转换为HTTPS,还必须在不妨碍您的网站自成立以来建立的任何搜索排名权限的情况下进行切换。 为什么应该从HTTP转换为HTTPS? 与非安全HTTP于不同,安全域使用SSL(安全套接字层)服务器上的加密代…...
Spring Boot + Netty + WebSocket 实现消息推送
1、关于Netty Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。 2、Maven依赖 <dependencies><!-- https://mvnrepository.com/artifact/io.netty/netty-all --><dependency><gr…...
AI之HardWare:英伟达NvidiaGPU性价比排名(消费级/专业级/中高端企业级)以及据传英伟达Nvidia2025年将推出RTX 5090/5080、华为2025年推出910C/910D
AI之HardWare:英伟达NvidiaGPU性价比排名(消费级/专业级/中高端企业级)以及据传英伟达Nvidia2025年将推出RTX 5090/5080、华为2025年推出910C/910D 目录 英伟达NvidiaGPU性能排名(消费级/专业级/中高端企业级) NVIDIA中消费级和专业级 GPU NVIDIA中高端企业GPU …...
ESP32云开发二( http + led + lcd)
文章目录 前言先上效果图platformio.iniwokwi.tomldiagram.json源代码编译编译成功上传云端完结撒花⭐⭐⭐⭐⭐ 前言 阅读此篇前建议先看 此片熟悉下wokwi https://blog.csdn.net/qq_20330595/article/details/144289986 先上效果图 Column 1Column 2 platformio.ini wokwi…...
JavaScript语言的软件工程
JavaScript语言的软件工程 引言 在当今软件开发的浪潮中,JavaScript已不仅仅是一个简单的前端脚本语言。它的位置已经升华为全栈开发的重要语言之一,借助Node.js等技术,JavaScript不仅可以用于浏览器环境,还可以在后端服务器中运…...
【Qt】04-Lambda表达式
前言一、概念引入二、使用方法2.1 基本用法代码示例2.2 捕获外部变量2.3 参数列表 三、完整代码mywidget.cppsecondwidget.cppmywidget.hsecondwidget.h 总结 前言 一、概念引入 Lambda表达式(Lambda Expressions)是C11标准引入的一种匿名函数对象&…...
Golang 生态学习
1. Go 语言基础 在深入 Go 语言的生态之前,首先需要掌握 Go 语言本身的核心特性。 • Go 语言官方文档:https://golang.org/doc/ Go 官方文档是学习语言基础和标准库的首选资源。 • 学习内容: • 基础语法:数据类型、控制流…...
Arcgis Pro安装完成后启动失败的解决办法
场景 之前安装的Arcgis Pro 今天突然不能使用了,之前是可以使用的,自从系统更新了以后就出现了这个问题。 环境描述 Arcgis Pro 3.0 Windows 10 问题描述 打开Arcgis Pro,页面也不弹出来,打开任务管理器可以看到进程创建之后&…...
支持向量机SVM的应用案例
支持向量机(Support Vector Machine,SVM)是一种强大的监督学习算法,广泛应用于分类和回归任务。 基本原理 SVM的主要目标是周到一个最优的超平面,该超平面能够将不同类别的数据点尽可能分开,并且使离该超平面最近的数…...
Linux中的Iptables介绍
文章目录 iptables1. 概述2. **工作原理**3. 数据包处理流程与规则匹配顺序4. 常用的匹配条件5. 动作类型6. 基本命令7. 高级功能 iptables 1. 概述 Iptables 是一个用于配置 Linux 内核防火墙的用户空间工具。它能够对进出服务器的网络数据包进行过滤、修改和转发等操作&…...
14天学习微服务-->第2天:Spring Cloud深入与实践
第2天:Spring Cloud深入与实践 一、Spring Cloud核心组件深入 在微服务架构中,Spring Cloud 提供了一系列核心组件来支持服务的注册与发现、配置管理、负载均衡等功能。今天我们将深入学习其中的三个关键组件:Eureka/Nacos(服务…...
使用 Box2D 库开发愤怒的小鸟游戏
使用 Box2D 库开发愤怒的小鸟游戏 Box2D 是一个开源的 2D 物理引擎,广泛应用于游戏开发中,特别是在模拟物体的运动、碰撞、重力等方面。在本文中,我们将利用 Box2D 库开发一个简化版的 愤怒的小鸟 游戏。我们将一步步展示如何实现物理引擎的…...
C# ComboBox 控件属性
ComboBox 的基本属性 在C#中,ComboBox控件具有多种属性,这些属性可以帮助开发者更好地控制和管理控件的各个方面。以下是一些基本的ComboBox属性及其功能: 公共属性 AccessibilityObject:获取分配给该控件的AccessibleObject。 Ac…...
《keras 3 内卷神经网络》
keras 3 内卷神经网络 作者:Aritra Roy Gosthipaty 创建日期:2021/07/25 最后修改时间:2021/07/25 描述:深入研究特定于位置和通道无关的“内卷”内核。 (i) 此示例使用 Keras 3 在 Colab 中查看 GitHub …...
Linux:文件描述符fd、系统调用open
目录 一、文件基础认识 二、C语言操作文件的接口 1.> 和 >> 2.理解“当前路径” 三、相关系统调用 1.open 2.文件描述符 3.一切皆文件 4.再次理解重定向 一、文件基础认识 文件 内容 属性。换句话说,如果在电脑上新建了一个空白文档࿰…...
ToDesk设置临时密码和安全密码都可以当做连接密码使用
ToDesk 在各领域办公都已经是非常常见了 为了安全 ToDesk 设置了连接密码,想连接 需要输入远程码和连接密码 我们刚打开 系统默认给我们用的是临时密码,安全性确实很强 和定时Tokey一样,固定时间切换。 但是 如果我们要经常连接这个电脑&a…...
C#防止重复提交
C#防止重复提交 文章目录 C#防止重复提交前言防止重复提交的思路Web API 防止重复提交代码实现代码讲解使用方法 MVC防止重复提交总结 前言 当用户在前端进行提交数据时,如果网络出现卡顿和前端没有给出响应的话顾客通常都会狂点提交按钮,这样就很容易导…...
递归算法学习v2.2
46. 全排列 class Solution {List<List<Integer>> ret;List<Integer> path;boolean[] check;public List<List<Integer>> permute(int[] nums) {ret new ArrayList<>();path new ArrayList<>();check new boolean[nums.length…...
unity插件Excel转换Proto插件-ExcelToProtobufferTool
unity插件Excel转换Proto插件-ExcelToProtobufferTool **ExcelToProtobufTool 插件文档****1. 插件概述****2. 默认配置类:DefaultIProtoPathConfig****属性说明** **3. 自定义配置类****定义规则****示例代码** **4. 使用方式****4.1 默认路径****4.2 自定义路径**…...
manim(manimgl)安装教学-win11(2024-08)
manim 目前的两种版本:★★ 稍微捋一捋【项目中的 readme.md 十分重要】 manimgl 是 Grant Sanderson(YouTube频道 3Blue1Brown的作者)等人开发。 现在为 manimgl,在维护中。 manimCE 是2020年后的 manim 分支 manim community e…...
【语言处理和机器学习】概述篇(基础小白入门篇)
前言 自学笔记,分享给语言学/语言教育学方向的,但对语言数据处理感兴趣但是尚未入门,却需要在论文中用到的小伙伴,欢迎大佬们补充或绕道。ps:本文不涉及公式讲解(文科生小白友好体质)ÿ…...
脚本工具:PYTHON
Python 是一种高级编程语言,以其简洁清晰的语法和强大的功能被广泛应用于各种领域,包括自动化脚本编写、数据分析、机器学习、Web开发等。以下是一些关于使用 Python 编写脚本工具的基本介绍、常用库以及一些实用技巧总结。 这里写目录标题 基础知识安装…...
一文讲解Redis常见使用方式
1. 单机模式部署 适用场景: • 开发和测试环境,或者对高可用性要求不高的小型项目。 部署步骤: 1. 拉取 Redis 镜像: docker pull redis:latest 2. 运行 Redis 容器: docker run -d --name redis-single -p 637…...