HTTP协议详解:从HTTP/1.0到HTTP/3的演变与优化

深入浅出:从头到尾全面解析HTTP协议
一、HTTP协议概述
1.1 HTTP协议简介
HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最广泛的通信协议之一。它用于客户端与服务器之间的数据传输,尤其是在Web浏览器和Web服务器之间。HTTP协议本身是无状态的,这意味着每次请求都是独立的,服务器不会记住前一个请求的任何信息。HTTP协议常见于Web浏览、API交互、移动应用通信等场景。
1.2 HTTP的历史发展
HTTP协议的起源可以追溯到20世纪90年代,Tim Berners-Lee发明了万维网(World Wide Web),并设计了HTTP协议来进行信息交换。最初的HTTP/0.9只支持GET方法,功能非常简单。
- HTTP/0.9:最初的HTTP版本,仅支持GET请求和HTML文档的传输。
- HTTP/1.0:引入了请求头、响应头以及常用的HTTP方法(GET、POST等)。
- HTTP/1.1:增加了持久连接、管道化、条件请求等功能,成为互联网应用的主流版本。
- HTTP/2:基于Google的SPDY协议,解决了HTTP/1.x的多路复用和性能瓶颈。
- HTTP/3:在HTTP/2的基础上使用QUIC协议进一步提升性能和安全性。
1.3 HTTP与HTTPS的区别
- HTTP:超文本传输协议,数据在传输过程中不加密,容易受到中间人攻击(MITM),因此不适合处理敏感信息。
- HTTPS:HTTP的安全版,通过SSL/TLS协议对数据进行加密,保证数据的机密性和完整性,广泛应用于银行、电商等需要保护用户隐私和交易安全的场景。
二、HTTP请求与响应结构详解
2.1 HTTP请求结构
HTTP请求是由请求行、请求头、空行和请求体组成的。每一部分都扮演着不同的角色。
2.1.1 请求行(Request Line)
请求行包含三部分:
- HTTP方法:如GET、POST、PUT、DELETE等,定义了客户端希望服务器执行的操作。
- URL:即客户端请求的资源路径,通常包括协议、主机、路径和查询参数。
- HTTP版本:例如
HTTP/1.1或HTTP/2,表示所使用的协议版本。
示例请求行:
GET /api/user?id=123 HTTP/1.1
2.1.2 请求头(Request Headers)
请求头由多个键值对组成,向服务器传递请求的元数据。常见的请求头有:
Host:请求的主机名和端口。User-Agent:客户端浏览器或应用程序的信息。Accept:客户端支持的内容类型(例如text/html、application/json)。Authorization:身份验证信息。Cookie:客户端发送的存储在浏览器中的cookie信息。
示例请求头:
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Accept: application/json
Authorization: Bearer <token>
2.1.3 请求体(Request Body)
请求体用于提交数据,通常在POST、PUT请求中出现。常见的格式有application/json、application/x-www-form-urlencoded。
示例请求体:
{"name": "JohnDoe","email": "john.doe@example.com"
}
2.2 HTTP响应结构
HTTP响应是由响应行、响应头、空行和响应体组成的。
2.2.1 响应行(Response Line)
响应行包含三部分:
- HTTP版本:例如
HTTP/1.1或HTTP/2,表示所使用的协议版本。 - 状态码:表示请求的处理结果,分为5类(2xx表示成功,4xx表示客户端错误,5xx表示服务器错误等)。
- 状态消息:对状态码的简短描述。
示例响应行:
HTTP/1.1 200 OK
2.2.2 响应头(Response Headers)
响应头包含关于响应的数据,如服务器信息、缓存策略、内容类型等。常见的响应头包括:
Content-Type:响应体的内容类型(如text/html、application/json)。Content-Length:响应体的大小。Cache-Control:控制缓存的行为。Set-Cookie:服务器向客户端设置cookie。
示例响应头:
Content-Type: application/json; charset=UTF-8
Content-Length: 123
Cache-Control: no-cache
2.2.3 响应体(Response Body)
响应体包含服务器返回的数据,通常是HTML页面、JSON格式数据、图片或其他媒体文件。响应体的内容由Content-Type决定。
示例响应体(JSON数据):
{"status": "success","data": {"user_id": 123,"name": "JohnDoe"}
}
三、HTTP状态码详解
HTTP状态码是服务器在响应客户端请求时返回的数字代码,表示请求的处理结果。状态码分为五类:
-
1xx(信息性状态码):表示请求已接收,继续处理。
100 Continue:继续请求,等待客户端发送请求体。
-
2xx(成功状态码):表示请求成功。
200 OK:请求成功,返回请求的资源。201 Created:请求成功,资源已经创建。
-
3xx(重定向状态码):表示需要客户端进一步操作才能完成请求。
301 Moved Permanently:资源永久移动到新位置。302 Found:资源临时移动到新位置。
-
4xx(客户端错误状态码):表示请求有问题,客户端需要纠正。
400 Bad Request:请求无效。404 Not Found:请求的资源不存在。401 Unauthorized:请求未通过身份验证。
-
5xx(服务器错误状态码):表示服务器内部错误。
500 Internal Server Error:服务器发生错误,无法完成请求。502 Bad Gateway:网关或代理服务器错误。
-
四、常见HTTP方法详解
HTTP协议定义了一系列方法,用于客户端和服务器之间的通信,不同方法的作用和使用场景各不相同。以下是常见HTTP方法的详细说明:
4.1 GET:获取资源
- 功能:
GET方法用于从服务器请求指定资源的数据。它是最常用的HTTP方法,通常用于读取数据或查询操作。 - 特点:
- GET请求是幂等的,即对同一资源的多次GET请求不会对服务器状态产生影响。
- 数据通过URL的查询字符串(Query String)传递,限制了数据大小,且数据暴露在URL中,不适合传输敏感信息。
- GET请求不会修改服务器上的数据。
- 应用场景:
- 获取网页内容。
- 执行搜索功能,查询某些特定条件的结果。
4.2 POST:提交数据
- 功能:
POST方法用于将数据发送到服务器,通常用于创建新资源或提交表单数据。 - 特点:
- POST请求的主要作用是提交数据,数据通常包含在请求体中,不显示在URL中。
- POST请求不是幂等的,多次发送同一请求可能会导致服务器状态发生变化(如重复创建资源)。
- 应用场景:
- 提交用户注册或登录表单。
- 上传文件或发送数据到服务器。
4.3 PUT:更新资源
- 功能:
PUT方法用于更新服务器上指定的资源,将资源的全部内容替换为请求体中的数据。如果资源不存在,则可以选择创建资源。 - 特点:
- PUT请求是幂等的,发送多次请求的结果相同。
- 适合用来执行全量更新操作。
- 应用场景:
- 更新用户信息(如替换一个用户的详细资料)。
- 更新已有的文件或数据记录。
4.4 DELETE:删除资源
- 功能:
DELETE方法用于请求服务器删除指定的资源。 - 特点:
- DELETE请求是幂等的,多次发送同一请求的结果相同,即删除资源后,后续请求不会影响状态。
- 应用场景:
- 删除用户、文件、记录等具体资源。
4.5 PATCH:部分更新资源
- 功能:
PATCH方法用于对资源进行部分更新,只修改资源中的某些字段,而不是替换整个资源。 - 特点:
- PATCH请求不是幂等的,某些实现中,重复发送同一请求可能导致不同结果。
- 应用场景:
- 更新单个字段(如修改用户名或邮箱地址)。
4.6 OPTIONS:获取支持的HTTP方法
- 功能:
OPTIONS方法用于请求服务器返回某资源支持的HTTP方法列表。它通常用于客户端检查允许的操作。 - 特点:
- OPTIONS请求不会对资源或服务器状态产生影响。
- 常用于CORS(跨域资源共享)的预检请求。
- 应用场景:
- 检查API接口支持的请求方法。
4.7 HEAD:获取响应头
- 功能:
HEAD方法和GET类似,但它只获取响应的头部信息,不返回响应体。它通常用于检查资源是否存在或了解资源的元信息。 - 特点:
- HEAD请求是幂等的。
- 可用于节省带宽,因为它不会传输实际内容。
- 应用场景:
- 检查文件是否存在。
- 获取文件的大小或上次修改时间。
每种HTTP方法都有其独特的功能和应用场景,选择合适的方法有助于更清晰地表达客户端与服务器之间的意图,并提高API的设计规范性。例如,GET和HEAD适合只读操作,而POST和PUT则常用于创建和更新资源;DELETE和PATCH则分别用于删除和部分更新资源。通过合理使用这些HTTP方法,可以有效提升应用的可维护性和性能。
- 功能:
五、HTTP/1.1 与 HTTP/2 对比
HTTP/1.1和HTTP/2是互联网中使用的两种主要的HTTP协议版本。HTTP/2是对HTTP/1.1的重大升级,旨在解决HTTP/1.1的一些局限性,并提高Web性能和用户体验。
5.1 HTTP/1.1的局限性
- 队头阻塞
HTTP/1.1的队头阻塞问题(Head-of-Line Blocking)是指在同一连接上,多个请求必须按顺序发送和接收。每个请求都需要等待前一个请求完成后才能开始处理。这种线性处理方式导致了延迟的增加,尤其是在需要加载大量资源的页面中表现得尤为明显。 - 头部冗余
在HTTP/1.1中,每次请求都需要附带完整的头部信息,即使这些信息在多个请求中是相同的。这种重复传输的机制导致了带宽的浪费,尤其是在需要频繁请求相同资源的情况下,头部信息的冗余传输增加了网络负担。
5.2 HTTP/2的优势
- 二进制分帧
HTTP/2采用二进制分帧层,将数据分为多个小块进行传输。这种方式不仅提高了传输效率,还避免了HTTP/1.1中的头部阻塞问题。二进制分帧使得协议更紧凑、更易于解析和处理,提高了数据传输的可靠性和速度。 - 多路复用
HTTP/2允许在同一TCP连接上并发处理多个请求和响应,消除了HTTP/1.1中队头阻塞的问题。多路复用使得多个数据流可以同时进行,无需等待其他流完成,极大地提高了传输效率和页面加载速度。 - 头部压缩
HTTP/2使用HPACK算法对HTTP头部进行压缩,减少了冗余数据的传输。HPACK通过维护头部字段的动态表和静态表,极大地减少了重复头部信息带来的带宽浪费,提高了传输效率。 - 服务器推送
HTTP/2支持服务器推送功能,允许服务器在客户端请求之前主动将资源推送到客户端。这种机制可以减少延迟,因为客户端可以更早地接收到所需资源,从而加快页面加载速度。
5.3 HTTP/2的性能优化
HTTP/2通过其技术创新显著提高了数据传输效率,带来了以下性能优化:
- 快速页面加载
由于多路复用和服务器推送,HTTP/2能够显著加快Web页面的加载速度。客户端可以同时接收多个资源,而不必等待前一个资源加载完成,这对于现代Web应用需要加载大量静态资源的情况尤为重要。 - 带宽利用率提升
头部压缩和二进制分帧使得HTTP/2在带宽利用率方面有了显著提升。通过减少冗余数据和优化数据传输格式,HTTP/2能够在同样的带宽条件下传输更多有效数据。 - 更好的用户体验
HTTP/2的性能提升直接转化为更好的用户体验。页面加载更快,响应更及时,用户在浏览Web应用时的等待时间减少,整体体验更加流畅。
总之,HTTP/2通过解决HTTP/1.1的局限性和引入新的特性,极大地提升了Web的性能和用户体验。尤其是在现代Web应用中,HTTP/2的多路复用、头部压缩和服务器推送等特性,使得资源加载更加高效,页面响应更加迅速。
六、HTTP协议的安全性与HTTPS
6.1 HTTP的安全性问题
HTTP(超文本传输协议)是一种明文传输的协议,这意味着数据在客户端与服务器之间传输时,未经加密,任何网络中间设备(如路由器、交换机、代理服务器等)都可以直接读取和篡改数据。由于HTTP缺乏加密和身份验证机制,它面临以下主要安全风险:
- 中间人攻击(MITM,Man-in-the-Middle Attack)
在中间人攻击中,攻击者通过截获并篡改客户端和服务器之间的通信内容,伪装成合法的通信方,窃取敏感信息或向客户端/服务器发送恶意数据。由于HTTP没有加密和身份验证,攻击者可以轻松地篡改数据或窃听传输内容。 - 数据嗅探
因为HTTP数据是以明文形式传输的,任何处于同一网络环境中的攻击者都可以通过网络嗅探工具(如Wireshark)捕获和查看传输的内容。尤其是在公共Wi-Fi或其他不安全的网络中,攻击者可以轻易地获取用户输入的敏感数据,如登录凭证、信用卡号、个人身份信息等。 - 数据篡改
在HTTP连接中,由于没有数据完整性校验机制,传输过程中的数据很容易遭到篡改。攻击者可以修改、插入、删除传输中的数据,使得接收方收到的内容不再是发送方原本意图传输的数据,造成信息泄露或损坏。
因此,当涉及到敏感信息,如账户密码、支付信息、个人身份资料等时,使用HTTP协议是非常不安全的,因为它无法提供任何的加密保护和身份验证。
6.2 HTTPS的优势
HTTPS(HyperText Transfer Protocol Secure,安全超文本传输协议)是对HTTP的加密扩展,它通过SSL/TLS协议为传输的数据提供加密保护,解决了HTTP的安全问题。HTTPS可以保证数据在传输过程中的机密性、完整性和身份验证,具体表现在以下几个方面:
- 数据加密
HTTPS通过使用SSL/TLS协议对数据进行加密,确保传输中的数据无法被第三方窃听。即使攻击者拦截了数据包,由于数据已被加密,没有密钥的情况下是无法解密的。这一加密过程使用了公钥加密和对称加密的结合,确保数据在传输中的保密性,防止敏感信息(如用户名、密码、信用卡号等)被泄露。 - 身份验证
HTTPS通过数字证书(SSL证书)验证服务器的身份。在建立HTTPS连接之前,服务器会向客户端提供一个由可信证书颁发机构(CA)签发的数字证书。该证书包含了服务器的公钥以及由证书颁发机构签名的信息。客户端可以通过验证证书是否有效来确认服务器的真实身份,从而避免伪装成合法站点的攻击(如“钓鱼攻击”)。只有当证书验证通过时,客户端才会与服务器建立安全的加密连接。 - 数据完整性
HTTPS协议通过使用消息认证码(MAC)和哈希算法确保传输数据的完整性。这意味着在数据传输过程中,任何尝试修改或篡改数据的行为都会被检测到。如果数据在传输过程中被篡改,接收方将发现校验值不匹配,从而避免篡改后的数据被接受。通过这种方式,HTTPS有效防止了数据丢失或被恶意篡改的风险,保证了数据的完整性和真实性。
此外,HTTPS协议还可以有效抵御“重放攻击”,即攻击者通过捕获并重发合法请求来干扰数据传输。由于每次连接建立时都进行密钥交换和加密,攻击者无法简单地重新发送截获的数据。
HTTP由于缺乏加密机制和身份验证,容易受到各种安全攻击,尤其是在处理敏感信息时极为不安全。而HTTPS通过使用SSL/TLS协议提供了端到端的加密,确保了数据传输的机密性、完整性,并通过数字证书验证身份,防止伪造网站的攻击。因此,HTTPS是当今互联网中保护用户隐私和数据安全的标准协议,是大多数网站和在线服务不可或缺的一部分。
七、HTTP/3:下一代协议
HTTP/3是基于Google的QUIC(Quick UDP Internet Connections)协议开发的,旨在进一步提升HTTP协议的性能和安全性。与HTTP/2不同,HTTP/3不再依赖于传统的TCP协议,而是基于UDP协议,这一变化带来了许多潜在的优势,尤其是在网络延迟、丢包处理和连接恢复方面。
7.1 HTTP/3的优势
- 低延迟
QUIC协议通过减少连接建立的时间,从而显著降低延迟。在传统的TCP连接中,客户端和服务器之间需要经过三次握手才能建立连接,而在QUIC中,由于采用了0-RTT(零往返时间)连接建立机制,客户端可以在首次连接时立即开始数据传输,从而减少了等待时间。此外,QUIC在处理数据传输时还支持0-RTT的数据发送,使得即使是在重复连接的情况下,数据传输也能更加高效。 - 抗网络抖动和丢包
QUIC协议的多路复用机制和流控算法使得HTTP/3在不稳定的网络环境中具有更强的适应性。具体而言,QUIC使用基于UDP的传输层,可以独立地重传丢失的数据包,而不会影响到其他数据流的传输。这意味着即便在存在丢包的情况下,HTTP/3的性能依然能够得到保障。此外,QUIC采用了高级的流控制算法,可以动态调整数据传输的速率,避免因网络不稳定而产生大规模的丢包。 - 更高的安全性
HTTP/3内建了强大的加密功能,所有的数据传输都采用TLS 1.3协议进行加密,这比HTTP/2使用的TLS 1.2要更为安全。此外,由于QUIC的设计本身就集成了加密功能,相比于TCP协议需要在应用层加密,HTTP/3提供了更低的加密延迟和更高的安全性。
7.2 HTTP/3的应用场景
- 高延迟和丢包率较高的网络环境
HTTP/3特别适用于高延迟和丢包率较高的网络环境。例如,在移动网络(如4G、5G)和低质量Wi-Fi环境中,由于这些网络条件通常存在较高的丢包率和延迟,传统的TCP协议可能会导致性能下降。而HTTP/3通过其改进的传输机制,能够有效缓解这些问题,确保更加稳定和快速的数据传输。 - 移动设备和异构网络环境
在移动设备广泛使用的今天,网络环境变得更加多样化且充满挑战。移动设备在不同的基站之间切换、连接到不同Wi-Fi热点等情况下,可能会经历频繁的网络断开和重新连接。HTTP/3的0-RTT连接建立和快速恢复机制,使得它在这种频繁变动的网络环境中能够提供更好的性能。 - 视频流、实时通信等延迟敏感型应用
对于视频流、在线游戏、实时语音通话等对延迟非常敏感的应用,HTTP/3能够提供更加流畅的体验。由于其低延迟和高吞吐量的特性,能够减少数据传输过程中的卡顿和延迟,从而提升用户体验,特别是在不稳定网络环境下表现更为突出。
总的来说,HTTP/3的应用场景主要集中在网络不稳定或高延迟的环境中,通过优化的连接建立、流控制和丢包恢复机制,能够显著提升现代互联网应用的性能和用户体验。
八、HTTP协议在现代Web中的应用
8.1 HTTP在Web浏览中的应用
在Web浏览过程中,HTTP是客户端和服务器之间通信的基础。每次浏览器访问一个网站,都会发起HTTP请求,获取Web页面及其资源(如CSS、JavaScript文件、图片等)。HTTP协议保证了请求和响应的顺利传输,在其中,浏览器通过GET请求从服务器获取页面内容,并通过POST请求提交表单数据。
8.2 API通信中的HTTP应用
随着Web API的流行,HTTP协议成为现代Web应用中不可或缺的一部分。RESTful API通常使用HTTP方法(如GET、POST、PUT、DELETE等)来定义不同的操作,客户端通过HTTP请求访问API端点,获取或提交数据。HTTP在API通信中提供了简洁、灵活且高效的方式来实现不同服务之间的数据交互。
8.3 移动应用与HTTP协议
移动应用也广泛使用HTTP协议与后台服务器进行通信。尤其是对于需要实时数据更新的应用(如社交媒体、天气预报等),HTTP协议能够高效地传输数据,并配合JSON、XML等数据格式进行高效解析。移动应用还可以使用HTTPS协议来保证数据的安全性,尤其是在传输敏感信息时。
8.4 HTTP与云计算和微服务架构
在云计算和微服务架构中,服务之间的通信通常使用HTTP协议进行。微服务通常暴露RESTful API,通过HTTP协议相互交互和调用。由于HTTP协议的广泛性和灵活性,它成为了云计算平台和微服务架构中最常见的通信方式,帮助不同的服务实现松耦合和高效的数据交换。
结语
HTTP协议作为Web通信的基石,经历了多年的发展与演变。从最初简单的HTTP/0.9到如今功能强大的HTTP/3,HTTP协议不断适应互联网的发展需求。了解HTTP的工作原理及其发展历程,对每一个Web开发者和网络工程师来说都是非常重要的。
希望本文能够帮助你深入理解HTTP协议的各个方面,助力你的学习与工作。如果你对本文内容有任何疑问或需要进一步讨论,欢迎在评论区留言。

相关文章:
HTTP协议详解:从HTTP/1.0到HTTP/3的演变与优化
深入浅出:从头到尾全面解析HTTP协议 一、HTTP协议概述 1.1 HTTP协议简介 HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最广泛的通信协议之一。它用于客户端与服务器之间的数据传输,尤其是在Web…...
张量并行和流水线并行在Transformer中的具体部位
目录 张量并行和流水线并行在Transformer中的具体部位 一、张量并行 二、流水线并行 张量并行和流水线并行在Transformer中的具体部位 张量并行和流水线并行是Transformer模型中用于提高训练效率的两种并行策略。它们分别作用于模型的不同部位,以下是对这两种并行的具体说…...
WEB开发: 丢掉包袱,拥抱ASP.NET CORE!
今天的 Web 开发可以说进入了一个全新的时代,前后端分离、云原生、微服务等等一系列现代技术架构应运而生。在这个背景下,作为开发者,你一定希望找到一个高效、灵活、易于扩展且具有良好性能的框架。那么,ASP.NET Core 显然是一个…...
【论文阅读】Federated learning backdoor attack detection with persistence diagram
目的:检测联邦学习环境下,上传上来的模型是不是恶意的。 1、将一个模型转换为|L|个PD,(其中|L|为层数) 如何将每一层转换成一个PD? 为了评估第𝑗层的激活值,我们需要𝑐个输入来获…...
Gooxi Eagle Stream 2U双路通用服务器:性能强劲 灵活扩展 稳定易用
人工智能的高速发展开启了飞轮效应,实施数字化变革成为了企业的一道“抢答题”和“必答题”,而数据已成为现代企业的命脉。以HPC和AI为代表的新业务就像节节攀高的树梢,象征着业务创新和企业成长。但在树梢之下,真正让企业保持成长…...
【计算机网络】实验2:总线型以太网的特性
实验 2:总线型以太网的特性 一、 实验目的 加深对MAC地址,IP地址,ARP协议的理解。 了解总线型以太网的特性(广播,竞争总线,冲突)。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实…...
如何在Spark中使用gbdt模型分布式预测
这目录 1 训练gbdt模型2 第三方包python环境打包3 Spark中使用gbdt模型3.1 spark配置文件3.2 主函数main.py 4 spark任务提交 1 训练gbdt模型 我们可以基于lightgbm快速的训练一个gbdt模型,训练相对比较简单,只要把训练样本处理好,几行代码可…...
Qt-5.14.2 example
官方历程很丰富,modbus、串口、chart图表、3D、视频 共享方便使用 Building and Running an Example You can test that your Qt installation is successful by opening an existing example application project. To run an example application on an Android …...
virtualbox给Ubuntu22创建共享文件夹
1.在windows上的操作,创建共享文件夹Share 2.Ubuntu22上的操作,创建共享文件夹LinuxShare 3.在virtualbox虚拟机设置里,设置共享文件夹 共享文件夹路径:选择Windows系统中你需要共享的文件夹 共享文件夹名称:挂载至wi…...
GPT打字机效果—— fetchEventSouce进行sse流式请求
EventStream基本用法 与 WebSocket 不同的是,服务器发送事件是单向的。数据消息只能从服务端到发送到客户端(如用户的浏览器)。这使其成为不需要从客户端往服务器发送消息的情况下的最佳选择。 const evtSource new EventSource(“/api/v1/…...
SpringBoot 在线家具商城:设计考量与实现细节聚焦
第4章 系统设计 市面上设计比较好的系统都有一个共同特征,就是主题鲜明突出。通过对页面简洁清晰的布局,让页面的内容,包括文字语言,或者视频图片等元素可以清晰表达出系统的主题。让来访用户无需花费过多精力和时间找寻需要的内容…...
每日速记10道java面试题07
其他资料: 每日速记10道java面试题01-CSDN博客 每日速记10道java面试题02-CSDN博客 每日速记10道java面试题03-CSDN博客 每日速记10道java面试题04-CSDN博客 每日速记10道java面试题05-CSDN博客 每日速记10道java面试题06-CSDN博客 目录 1.线程的生命周期在j…...
前端面试热门题(二)[html\css\js\node\vue)
Vue 性能优化的方法 Vue 性能优化的方法多种多样,以下是一些常用的策略: 使用v-show替换v-if:v-show是通过CSS控制元素的显示与隐藏,而v-if是通过操作DOM来控制元素的显示与隐藏,频繁操作DOM会导致性能下降。因此&am…...
mvc基础及搭建一个静态网站
mvc asp.net core mvc环境 .net8vscode * Asp.Net Core 基础* .net8* 前辈* .net 4.9 非跨平台版本 VC* 跨平台版本* 1.0* 2.0* 2.1* 3.1* 5* 语言* C#* F# * Visual Basic* 框架* web应用* asp应用* WebFrom* mvc应用* 桌面应用* Winform* WPF* Web Api api应用或者叫服务* …...
AOSP的同步问题
repo sync同步时提示出错: error: .repo/manifests/: contains uncommitted changesRepo command failed due to the following UpdateManifestError errors: contains uncommitted changes解决方法: 1、cd 进入.repo/manifests cd .repo/manifests2、执行如下三…...
HarmonyOS4+NEXT星河版入门与项目实战(23)------实现手机游戏摇杆功能
文章目录 1、案例效果2、案例实现1、代码实现2、代码解释4、总结1、案例效果 2、案例实现 1、代码实现 代码如下(示例): import router from @ohos.router import {ResizeDirection } from @ohos.UiTest import curves...
Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计)
Logistic Regression(逻辑回归)、Maximum Likelihood Estimatio(最大似然估计) 逻辑回归(Logistic Regression,LR)逻辑回归的基本思想逻辑回归模型逻辑回归的目标最大似然估计优化方法 逻辑回归…...
Vue文字转语音实现
在开发流程中,面对语音支持的需求,小规模语音内容或许可以通过预处理后播放来轻松应对,但当涉及大量语音时,这一方法就显得繁琐低效了。为此,智慧的开发者们总能找到便捷的解决方案——利用Web技术实现语音播放&#x…...
Docker快速部署RabbitMq
在外网服务器拉取镜像 docker pull arm64v8/rabbitmq:3.8.9-management或者拉去我的服务器的 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_rabbitmq:3.8.9-management重新命名 docker tag registry.cn-hangzhou.aliyuncs.com/qiluo-images/lin…...
glog在vs2022 hello world中使用
准备工作 设置dns为阿里云dns 223.5.5.5,下载cmake,vs2022,git git clone https://github.com/google/glog.git cd glog mkdir build cd build cmake .. 拷贝文件 新建hello world并设置 设置预处理器增加GLOG_USE_GLOG_EXPORT;GLOG_NO_AB…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
SQLSERVER-DB操作记录
在SQL Server中,将查询结果放入一张新表可以通过几种方法实现。 方法1:使用SELECT INTO语句 SELECT INTO 语句可以直接将查询结果作为一个新表创建出来。这个新表的结构(包括列名和数据类型)将与查询结果匹配。 SELECT * INTO 新…...
Neo4j 完全指南:从入门到精通
第1章:Neo4j简介与图数据库基础 1.1 图数据库概述 传统关系型数据库与图数据库的对比图数据库的核心优势图数据库的应用场景 1.2 Neo4j的发展历史 Neo4j的起源与演进Neo4j的版本迭代Neo4j在图数据库领域的地位 1.3 图数据库的基本概念 节点(Node)与关系(Relat…...
【Pandas】pandas DataFrame dropna
Pandas2.2 DataFrame Missing data handling 方法描述DataFrame.fillna([value, method, axis, …])用于填充 DataFrame 中的缺失值(NaN)DataFrame.backfill(*[, axis, inplace, …])用于**使用后向填充(即“下一个有效观测值”)…...
