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

HTTP(超文本传输协议)全面总结

HTTP(HyperText Transfer Protocol,超文本传输协议)是万维网(World Wide Web)应用中的基础协议,用于客户端与服务器之间的数据传输。随着互联网技术的发展,HTTP协议也经历了多个版本的更新,每个版本的改进都旨在提升性能、安全性和灵活性。以下是HTTP各版本的特点、优缺点以及HTTP发展趋势。

一、HTTP/1.0

HTTP/1.0 是 HTTP 协议的第一个版本,首次在 1996 年发布,成为万维网(WWW)的一部分。它是现代互联网协议栈中的基础之一,但在早期的互联网通信中,HTTP/1.0 扮演了重要的角色。

1.HTTP/1.0的特点

(1)无状态协议

HTTP 是一种“无状态”协议,这意味着每次请求和响应之间没有任何联系。每个请求都是独立的,服务器不会保留任何关于客户端的状态信息。

(2)无持久连接

在 HTTP/1.0 中,每个 HTTP 请求都需要建立一个新的 TCP 连接。请求完成后,这个连接会被关闭。这意味着每个请求都需要进行一次新的三次握手,增加了延迟和带宽的开销;每次访问网页中的多个资源(如图片、CSS、JavaScript 等),浏览器必须重新与服务器建立连接。

(3)请求格式简单

HTTP/1.0 的请求格式简单,包括请求行、请求头和请求体。请求头通常包含信息,如浏览器类型、语言、接受的内容类型等。

2.HTTP/1.0的请求结构

(1)请求行

包括方法(如 GET、POST)、URL 和 HTTP 版本(如 HTTP/1.0)。

示例:

GET /index.html HTTP/1.0

(2)请求头

包括客户端环境的详细信息,例如浏览器类型、语言、可接受的内容类型等。

示例:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36

(3)请求体(可选)

用于 POST 请求时,包含发送到服务器的数据,如表单数据。

3.HTTP/1.0的响应结构

(1)响应行

包括 HTTP 版本、状态码和状态描述。

示例:

HTTP/1.0 200 OK

(2)响应头

描述服务器、内容类型、日期等信息。

示例:

Content-Type: text/html; charset=UTF-8

(3)响应体

服务器返回的内容(如 HTML 页面、图像、JSON 数据等)。

4.HTTP/1.0的其他特性

(1)支持不同的请求方法

HTTP/1.0 引入了几种常见的请求方法:

HEAD:请求指定资源的头部信息。

GET:请求指定的资源。

POST:提交数据给服务器。

PUT:用于上传文件或数据。

DELETE:删除指定的资源。

(2)状态码

HTTP/1.0 使用了三位数字的状态码来指示请求的处理状态。

最常见的状态码包括:

200 OK:请求成功。

404 Not Found:资源未找到。

301 Moved Permanently:资源已永久移动。

5.HTTP/1.0的优点

(1)简单易理解

HTTP/1.0 协议非常简单,对于开发者来说非常容易理解和实现,特别是在早期互联网应用中,它作为一个轻量级的协议非常适用。

(2)兼容性强

在 1990s 年代,HTTP/1.0 非常适合当时的硬件和网络条件,具有很高的兼容性。

6.HTTP/1.0的缺点

(1)无状态、无持久连接

由于连接在每次请求后都会关闭,这意味着浏览器必须在每次请求时都重新与服务器建立连接,造成了额外的开销。

(2)性能低

由于每个请求都需要进行新的 TCP 握手,多个请求会占用较多带宽和延迟。建立和关闭连接的过程需要时间和计算资源,尤其是在页面包含多个资源时(例如图片、CSS 文件、JavaScript 文件等),延迟较高。

二、HTTP1.1

HTTP/1.1 是 HTTP 协议的第二个版本,首次在 1999 年发布(RFC 2616)。它在 HTTP/1.0 的基础上进行了许多改进,尤其在性能、效率和扩展性方面。HTTP/1.1 成为了 Web 服务和浏览器通信的主流协议,直到今天,虽然 HTTP/2 和 HTTP/3 已经开始普及,但 HTTP/1.1 仍然在很多系统中被广泛使用。

1.HTTP/1.1的特点

(1)持久连接

在 HTTP/1.1 中,默认启用了持久连接(也称为长连接)。这意味着客户端和服务器之间的 TCP 连接在一次请求响应周期结束后不会立即关闭,而是保持开放状态,允许进行多个请求和响应,从而减少了频繁建立连接的开销。

(2)管道化

HTTP/1.1 支持管道化(但浏览器的支持较差),即客户端可以在接收到响应之前发送多个请求。这样,客户端可以提前发送请求,而不需要等待前一个请求的响应完成。这减少了请求延迟,但服务器必须按顺序返回响应

(3)更强的缓存支持

HTTP/1.1 对缓存机制进行了增强,增加了多个缓存控制头,如 Cache-Control,允许更精确地控制缓存策略。这让浏览器和中间代理服务器能更好地缓存资源,提高访问速度。

(4)支持分块传输编码

在 HTTP/1.1 中,响应体可以采用分块传输编码。这种编码方式允许服务器在不知道内容长度的情况下逐步发送响应体,尤其适合流媒体数据或动态生成的内容。

(5)支持虚拟主机

HTTP/1.1 增强了对虚拟主机的支持。在 HTTP/1.0 中,每个 IP 地址只能绑定一个网站,而 HTTP/1.1 允许通过 Host 头部字段在同一个 IP 地址上承载多个域名。这为多租户托管服务(如共享主机)提供了技术支持。

2.HTTP/1.1的请求格式

HTTP/1.1 的请求和响应结构与1.0类似,但增加了更多的头部字段和特性。

(1)请求行

包括方法、URL 和 HTTP。

示例:

GET /index.html HTTP/1.1

(2)请求头

包含有关客户端和请求的信息,例如 Host、Connection、Accept-Encoding 等。

示例:

Host: www.example.com

(3)请求体(可选)

用于发送数据,通常用于 POST 或 PUT 请求。

3.HTTP/1.1的响应格式

(1)响应行

包含 HTTP 版本、状态码和状态描述。

示例:

HTTP/1.1 200 OK

(2)响应头

包括服务器信息、内容类型、日期、缓存控制等信息。

示例:

Content-Type: text/html; charset=UTF-8

(3)响应体

包含服务器返回的内容。

4.HTTP/1.1的主要新特性

(1)Host 头部

HTTP/1.1 引入了 Host 头部字段,它在请求中明确指出客户端请求的目标主机和端口。这是因为多个网站可以共享同一个 IP 地址(虚拟主机)。

示例:Host: www.example.com

(2)Connection 头部

HTTP/1.1 引入了 Connection 头部,允许控制连接的状态,常用的值包括 keep-alive(保持连接)和 close(关闭连接)。

示例:Connection: keep-alive

(3)Cache-Control 头部

HTTP/1.1 加强了对缓存的控制,Cache-Control 头部使得客户端和代理可以更精确地控制缓存策略。

常用的指令包括:

no-cache:不使用缓存,必须向服务器验证。

max-age=3600:资源最大缓存时间为 3600 秒。

(4)Transfer-Encoding 头部

HTTP/1.1 支持 Transfer-Encoding,允许服务器将响应分块发送。对于无法提前知道数据大小的响应,分块传输非常有用。

示例:Transfer-Encoding: chunked

(5)Status Codes 增强

HTTP/1.1 引入了更多的状态码:

100 Continue:客户端可以继续发送请求的剩余部分。

206 Partial Content:表示响应体是部分内容,通常用于断点续传。

409 Conflict:请求与当前资源状态发生冲突。

410 Gone:表示资源已被永久删除。

5.HTTP/1.1的优点

(1)持久连接

持久连接减少了每个请求建立新连接的开销,尤其在页面需要加载多个资源时,显著减少了延迟。

(2)管道化

管道化允许同时发出多个请求,虽然它的支持并不完全广泛,但它仍然提高了吞吐量。

(3)增强的缓存机制

HTTP/1.1 强化了缓存机制,使得客户端能够更智能地缓存和重用资源,减少了不必要的网络流量。

(4)虚拟主机支持

HTTP/1.1 的虚拟主机功能,使得多个网站可以共享同一 IP 地址,这对于现代的 Web 托管服务(如共享主机、云托管)至关重要。

6.HTTP/1.1的缺点

(1)管道化并未完全普及

尽管 HTTP/1.1 支持管道化,但由于浏览器和服务器的兼容性问题,管道化的效果并不显著。现代的 HTTP/2 通过多路复用解决了这个问题。

(2)延迟

虽然 HTTP/1.1 改进了持久连接和缓存机制,但对于现代 Web 页面的需求,它仍然存在一些性能瓶颈,例如每个 TCP 连接的串行化请求,仍然需要时间进行顺序处理。

7.HTTP/1.1的总结

HTTP/1.1 在 HTTP/1.0 的基础上进行了一些重要的优化,尤其是在持久连接、管道化、缓存控制和虚拟主机支持方面。它大大提高了 Web 服务的性能,但仍然存在一些限制,尤其是针对复杂的网页和多资源请求的性能瓶颈。随着 HTTP/2 和 HTTP/3 的引入,HTTP/1.1 正在逐步被更先进的协议取代,但仍然在许多场景中广泛使用。

三、HTTP2.0

HTTP/2 于 2015 年 5 月发布,并由 IETF (Internet Engineering Task Force) 通过 RFC 7540 正式定义。HTTP/2 基于 Google的 SPDY 协议,并且在传输效率、带宽优化和延迟减少方面做出了显著改进。HTTP/2 旨在解决 HTTP/1.1 中的一些性能瓶颈。

1.HTTP/2.0的特点

HTTP/2 引入了一些新的特性,主要优化了 HTTP 协议在性能和传输效率方面的表现。

以下是 HTTP/2 的关键特性:

(1)二进制协议

HTTP/2 完全改变了 HTTP 的传输方式。与 HTTP/1.x 的文本协议不同,HTTP/2 使用二进制协议进行数据传输。数据被分解成小的帧(Frame),通过多路复用的方式在一个连接上并行传输多个请求和响应。这使得数据传输更高效、更少的解析和更小的传输开销。

(2)多路复用(Multiplexing)

在 HTTP/2 中,所有的请求和响应都可以在一个单一的 TCP 连接中并行传输,而不需要等待其他请求的完成。这个特性彻底解决了 HTTP/1.1 中的“头阻塞”问题,在同一个连接上处理多个请求,避免了多个连接的建立和关闭,减少了延迟。

(3)请求优先级(Prioritization)

HTTP/2 允许客户端为每个请求分配优先级,这样服务器可以根据请求的重要性或紧急性优化响应顺序。通过优先级机制,服务器能够智能地调度资源,优化重要资源的加载顺序,从而提升页面的响应速度。

(4)头部压缩(Header Compression)

HTTP/2 使用 HPACK 算法来压缩 HTTP 请求和响应头部。HTTP 请求头和响应头通常包含重复的内容(例如 User-Agent、Host、Cookie 等),HPACK 压缩算法通过字典和增量编码技术,显著减少了这些重复信息的传输量,节省了带宽。

(5)流控制(Flow Control)

HTTP/2 引入了流控制机制,它允许客户端和服务器控制每个连接上数据的流量。每个连接都被分为多个流,每个流都有独立的流量控制,防止某个流占用过多的资源。流控制的目标是防止网络拥塞和服务器过载,确保公平的带宽分配。

(6)服务器推送(Server Push)

服务器推送是 HTTP/2 的一个创新特性。它允许服务器在客户端请求某些资源时,主动推送其他相关资源到客户端,而不需要客户端明确请求。例如,客户端请求一个 HTML 文件,服务器可以同时将 CSS 和 JavaScript 文件推送到客户端。这样可以减少资源请求的延迟,提升页面加载速度。

2.HTTP/2.0的请求和响应的结构

在 HTTP/2 中,数据以二进制帧的形式进行传输,帧通过流(Stream)来组织。

(1)帧(Frame)

每个帧都有一个固定的头部,表示它的类型和其他相关信息。

HTTP/2 中的帧类型:

HEADERS:用于传输请求和响应的头部。

DATA:用于传输数据部分(响应体或请求体)。

PRIORITY:表示流的优先级。

RST_STREAM:用于重置流。

WINDOW_UPDATE:用于流量控制。

PUSH_PROMISE:用于服务器推送。

(2)流(Stream)

一个流是一个双向的 HTTP/2 通道,可以在其中传输多个帧。每个流都有一个唯一的标识符,并且在流中传输的数据被分成多个帧。这使得多个请求和响应可以并行传输,而不会阻塞其他请求。

(3)数据流(Data Stream)

HTTP/2 的数据流包含请求和响应的所有数据。这些数据通过帧(如 DATA 帧)进行传输,客户端和服务器可以并行传输多个数据流。

3.HTTP/2.0的优点

(1)多路复用,减少延迟

通过多路复用,HTTP/2 能够在单一连接上同时处理多个请求和响应,从而减少了因等待其他请求响应而带来的延迟。

(2)头部压缩,节省带宽

头部压缩使得请求和响应的头部数据量显著减少,尤其是对于经常重复的请求头(如 cookies 和 host 信息)。这样减少了传输的数据量,节省了带宽。

(3)更好的流量控制

HTTP/2 引入的流量控制机制能够使得客户端和服务器更加灵活地管理带宽和传输流量,防止资源过载。

(4)提升页面加载速度

服务器推送和请求优先级机制使得客户端和服务器可以更加智能地进行资源调度,从而更快地加载页面内容。通过预先推送和优化请求顺序,用户能够更早地获取所需的资源。

4.HTTP/2.0的缺点

(1)中间件支持

由于 HTTP/2 的二进制格式和多路复用特性,它对现有的代理和中间件架构提出了挑战,特别是对于那些只支持 HTTP/1.x 的中间件。为了向下兼容,很多系统仍然需要支持 HTTP/1.x。

(2)复杂性增加

与 HTTP/1.1 相比,HTTP/2 的协议结构更加复杂,尤其是在多路复用、流量控制和优先级等方面。虽然这些特性能提高性能,但它们也使得开发和维护变得更加复杂。

5.HTTP/2.0与HTTP/1.1的的对比

6.HTTP/2.0的总结

HTTP/2 是对 HTTP/1.x 协议的重大改进,优化了 Web 性能,尤其是在多资源加载、延迟减少和带宽利用方面。通过二进制传输、多路复用、头部压缩和服务器推送等特性,HTTP/2 能够显著提高 Web 页面的加载速度和响应能力。虽然部署 HTTP/2 可能需要一定的技术支持,尤其是在加密和中间件兼容性方面,但它的优势使得它成为现代 Web 开发的首选协议之一。

四、HTTP3.0

HTTP/3 是继 HTTP/2 之后的新一代 HTTP 协议,它旨在进一步提升 Web 性能,尤其是在连接建立、延迟和丢包容忍度方面做出改进。HTTP/3 采用了 QUIC(Quick UDP Internet Connections)协议作为传输层,而非传统的基于 TCP 的连接。QUIC 本身最早由 Google 提出,随后成为 IETF(互联网工程任务组)标准,并最终成为 HTTP/3 的核心部分。

HTTP/3 的目标是解决 HTTP/2 中的一些瓶颈,如连接建立延迟、TCP 的拥塞控制问题、头阻塞等问题。它通过引入基于 UDP 的传输协议来实现更快、更可靠的数据传输。

1.HTTP/3 与 HTTP/2 的主要区别

2.QUIC 协议

HTTP/3 的核心是 QUIC 协议,QUIC 是基于 UDP 的协议,设计目标是减少连接建立时间和提高传输性能。QUIC 解决了 TCP 中的一些问题,主要包括:

(1)减少连接建立时间

QUIC 可以在 0-1 次往返时间(RTT)内建立连接,而传统的 TCP 协议需要经过三次握手才能建立连接。QUIC 结合了加密和连接建立过程,能够减少延迟,特别是对于高延迟网络环境,效果更为显著。

(2)改进的流量控制

QUIC 在传输数据时能够更精细地控制每个流的传输量,避免了 TCP 的全局流量控制和头阻塞问题。在 QUIC 中,流是独立的,每个流可以独立控制,避免了一个流的阻塞影响到其他流。

(3)更好的丢包容忍性

QUIC 在处理丢包时,比 TCP 更加高效。TCP 一旦发生丢包,会停止传输数据并进行重传,而 QUIC 则可以同时进行多个流的传输,确保其他流不会受到丢包影响。QUIC 使用了更先进的拥塞控制算法,提供更好的丢包恢复能力。

(4)内建加密(TLS 1.3)

QUIC 强制使用 TLS 1.3 进行加密,提供比传统 TLS 更高效的加密和握手过程。TLS 握手被与 QUIC 的连接建立合并,从而减少了连接建立的延迟。

(5)0-RTT 数据传输

QUIC 支持 0-RTT 数据传输,即在客户端与服务器之间建立第一个连接后,客户端可以在后续的连接中立即开始数据传输,无需等待完整的握手过程。这对于需要快速连接和低延迟的应用非常有用。

3.HTTP/3 的新特性

(1)多路复用的改进

与 HTTP/2 类似,HTTP/3 支持多路复用,即允许多个请求和响应同时在一个连接中传输。然而,HTTP/2 中的多路复用受限于 TCP 连接的队头阻塞问题,HTTP/3 基于 QUIC 协议解决了这一问题。每个流在 QUIC 中都是独立的,流之间不会互相干扰,这使得数据传输更加高效。

(2)头部压缩:QPACK

HTTP/3 使用 QPACK 代替了 HTTP/2 中的 HPACK。QPACK 采用了与 QUIC 协议配合的压缩方式,优化了头部的压缩过程,避免了头部阻塞问题,提升了传输效率。

(3)零 RTT 和迁移性

QUIC 协议的零 RTT(0-RTT)特性使得客户端和服务器之间的首次连接可以非常快速地建立。而且,QUIC 具有更好的迁移性——当用户的 IP 地址发生变化时,QUIC 能够继续保持连接而无需重新建立连接,这对于移动网络环境中的应用非常重要。

4.HTTP/3 的优点

(1)减少连接建立延迟

QUIC 协议在 0-1 次往返时间内建立连接,相比 TCP 三次握手过程大大减少了延迟,尤其适用于高延迟网络环境。

(2)消除队头阻塞

在 HTTP/2 中,多个请求和响应会在同一个 TCP 连接中排队传输,若某个请求发生延迟,后续的请求也会被阻塞(队头阻塞)。而 HTTP/3 使用 QUIC 协议消除了这一问题,每个流都是独立的,不会互相干扰。

(3)提高丢包恢复能力

QUIC 在丢包发生时具有更强的容错能力,能够在多个流之间并行传输数据,即使某个流丢包,其他流也能继续进行,不会发生全局的重传。

(4)内置加密提高安全性

HTTP/3 强制使用 TLS 1.3 进行加密,相较于 HTTP/2 中可选的加密方式,它提高了数据传输的安全性,并且加密过程更加高效。

(5)移动网络适应性

QUIC 的迁移性使得在用户的 IP 地址变化时(例如从 Wi-Fi 切换到移动数据)依然能够保持连接。这对于现代移动设备非常有用,可以避免在切换网络时丢失连接。

5.HTTP/3 的缺点

(1)对 UDP 的依赖

QUIC 基于 UDP,虽然这在性能上有很多优势,但它也带来了一些挑战,特别是在一些企业网络环境中,UDP 流量可能会受到防火墙或 NAT(网络地址转换)设备的限制。对于 UDP 流量的支持不如 TCP 广泛,这可能会影响一些网络环境下的稳定性。

(2)部署复杂性

与 HTTP/2 相比,HTTP/3 和 QUIC 的部署更加复杂,特别是对于现有的服务器和中间件。如果服务器或网络设备不支持 QUIC,可能需要进行额外的配置或升级。

6.总结

HTTP/3 是为了弥补 HTTP/2 中的一些性能和延迟瓶颈而诞生的协议。通过采用 QUIC 协议,它实现了更快速的连接建立、更高效的流量控制、更低的延迟和更强的丢包恢复能力。HTTP/3 不仅适用于高延迟和丢包严重的网络环境,还能提高移动设备的网络适应性,并强制加密,提升安全性。尽管部署上存在一些挑战,但随着技术的成熟,HTTP/3 很可能会成为未来 Web 通信的主流协议。

相关文章:

HTTP(超文本传输协议)全面总结

HTTP(HyperText Transfer Protocol,超文本传输协议)是万维网(World Wide Web)应用中的基础协议,用于客户端与服务器之间的数据传输。随着互联网技术的发展,HTTP协议也经历了多个版本的更新&…...

OpenCV 图形API(72)图像与通道拼接函数-----根据指定的方式翻转图像(GMat)函数 flip()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 翻转一个2D矩阵,围绕垂直轴、水平轴或同时围绕两个轴。 该函数以三种不同的方式之一翻转矩阵(行和列的索引是从0开始的&a…...

【报错问题】 macOS 的安全策略(Gatekeeper)阻止了未签名的原生模块(bcrypt_lib.node)加载

这个错误是由于 macOS 的安全策略(Gatekeeper)阻止了未签名的原生模块(bcrypt_lib.node)加载 导致的。以下是具体解决方案: 1. 临时允许加载未签名模块(推荐先尝试) 在终端运行以下命令&#x…...

keep-alive具体使用方法

什么是 Keep-Alive <keep-alive> 是 Vue.js 提供的一个内置组件&#xff0c;用于缓存动态组件实例&#xff0c;从而避免重复渲染已加载过的组件。它的主要功能是在切换组件时保留状态和 DOM 结构&#xff0c;提升性能。 工作原理 <keep-alive> 的核心在于维护一个…...

【C++11】包装器:function与bind

前言&#xff1a; 上文我们学了C11中一个新的表达式&#xff1a;Lambda表达式。Lambda表达式可以在函数内部定义&#xff0c;其本质是仿函数【C11】Lambda表达式-CSDN博客 本文我们来学习C11的下一个新语法&#xff1a;包装器 function function的定义为&#xff1a; templat…...

Educational Codeforces Round 178 div2(题解ABCDE)

A. Three Decks #1.由于最后三个数会相等&#xff0c;提前算出来和&#xff0c;%3判断&#xff0c;再判前两个数是否大于 #include<iostream> #include<vector> #include<stdio.h> #include<map> #include<string> #include<algorithm> #…...

mermaid 序列图 解析

sequenceDiagramparticipant UI as 用户界面participant Executor as 任务执行器participant StateMgr as 状态管理器participant Repo as 数据仓库UI->>Executor: 执行任务3350c74e...Executor->>StateMgr: 更新状态为"measuring"StateMgr->>Repo…...

DTO,VO,PO,Entity

1. DTO (Data Transfer Object) 定义 DTO 是数据传输对象&#xff0c;用于在不同系统或层之间传输数据。 目的 简化数据传输&#xff0c;降低耦合&#xff0c;通常只包含需要传输的字段&#xff0c;避免暴露内部实现细节。 使用场景 Controller 和 Service 或 远程调用 之…...

Proser:重新介绍

回想Proser的定位&#xff1a;一款直观的【协议发送】模拟软件。 现在间断更新下来&#xff0c;基本成了一款通信调试助手类软件 Proser 是一款支持串口与网络的通信调试助手&#xff0c;其独有的协议编辑器、数据检视、标尺等功能&#xff0c;让指令模拟与数据分析更加易用。…...

微信小程序 首页之轮播图和搜索框 代码分享

注意&#xff01;&#xff01;&#xff01; 只有样式&#xff0c;还没功能开发&#xff01;&#xff01;&#xff01; index.wxml <!-- 搜索框 --> <view class"search"><input placeholder"请输入搜索的内容"></input><imag…...

3D可视化编辑器模版

体验地址&#xff1a;http://mute.turntip.cn 整个搭建平台核心模块包含如下几个部分&#xff1a; 3D场景渲染 组件拖拽系统 元素编辑功能 状态管理 历史记录与撤销/重做 技术栈 前端框架与库 React 18 用于构建用户界面的JavaScript库 Next.js 14 React框架&#xff0c;提供服…...

foc控制 - clarke变换和park变换

1. foc控制框图 下图是foc控制框图&#xff0c;本文主要是讲解foc控制中的larke变换和park变换clarke变换将 静止的 a b c abc abc坐标系 变换到 静止的 α β αβ αβ坐标系&#xff0c;本质上还是以 定子 为基准的坐标系park变换 则将 α β αβ αβ坐标系 变换到 随 转…...

DeepSeek: 探索未来的深度学习搜索引擎

深度学习驱动的下一代搜索引擎&#xff1a;DeepSeek 在信息爆炸的时代&#xff0c;搜索引擎作为连接用户与互联网世界的桥梁&#xff0c;其重要性不言而喻。然而&#xff0c;随着用户需求的日益多样化和复杂化&#xff0c;传统搜索引擎在理解和满足用户需求方面逐渐显现出局限…...

如何在本地部署小智服务器:从源码到全模块运行的详细步骤

小智聊天机器人本地后台服务器源码全模块部署 作者&#xff1a;林甲酸 -不是小女子也不是女汉子 是大女子 更新日期&#xff1a;2025年4月29日 &#x1f3af; 前言&#xff1a;为什么要写这篇教程&#xff1f; 上周按照虾哥小智服务器的教程去部署本地后台&#xff0c;我用的是…...

基于论文的大模型应用:基于SmartETL的arXiv论文数据接入与预处理(四)

上一篇介绍了基于SmartETL框架实现arxiv采集处理的基本流程&#xff0c;通过少量的组件定制开发&#xff0c;配合yaml流程配置&#xff0c;实现了复杂的arxiv采集处理。 由于其业务流程复杂&#xff0c;在实际应用中还存在一些不足需要优化。 5. 基于Kafka的任务解耦设计 5.…...

GrapesJS 终极定制组件设计方案:扁平化对象属性编辑、多区域拖拽、多层嵌套与组件扩展实战

掌握 GrapesJS 复杂组件实用技巧&#xff0c;打造高复用、高交互的前端低代码组件体系 随着低代码可视化编辑需求日益提升&#xff0c;GrapesJS 作为优秀开源画布编辑器&#xff0c;灵活的组件机制是其核心优势。但在实际项目中&#xff0c;你可能会遇到&#xff1a; 如何编辑…...

Spring MVC 如何映射 HTTP 请求到 Controller 方法?

我们来详细分析一下如何在 Spring MVC 中将 HTTP 请求映射到 Controller 的处理方法&#xff08;Handler Methods&#xff09;上&#xff0c;以及 RequestMapping 注解的使用方法。 请求映射的核心&#xff1a;RequestMapping 注解 RequestMapping 是 Spring MVC 中最核心、最…...

vue.js中的一些事件修饰符【前端】

不要一直责怪过去的自己&#xff0c;他独自站在雾里也很迷茫。 目录 .stop&#xff1a;.prevent&#xff1a;.self&#xff1a;.once&#xff1a;.capture&#xff1a;.native&#xff1a;何时使用 .native&#xff1f; .stop&#xff1a; 作用&#xff1a;调用 event.stopPro…...

WEBSTORM前端 —— 第2章:CSS —— 第4节:盒子模型

目录 1.画盒子 2.Pxcook软件 3.盒子模型——组成 4.盒子模型 ——边框线 5.盒子模型——内外边距 6.盒子模型——尺寸计算 7.清除默认样式 8.盒子模型——元素溢出 9.外边距问题 ①合并现象 ②塌陷问题 10.行内元素——内外边距问题 11.盒子模型——圆角 12.盒子…...

Cursor —— AI编辑器 使用详解

Cursor - The AI Code Editor 一、Cursor 是什么&#xff1f; Cursor 是一款优秀的AI代码编辑器&#xff0c;它内置了 Deepseek-R1、GPT-4、Claude等 AI 模型。 简单说&#xff0c;就是&#xff1a;Cursor VS Code 编辑器 AI 大模型 Cursor 功能特性&#xff08;代码补全、…...

故障诊断——复现github代码ClassBD-CNN(BDCNN)

刚好看到这篇文献有github代码&#xff0c;而且也比较新&#xff0c;感觉可以当作自己论文中的对比方法。 https://www.sciencedirect.com/science/article/pii/S0888327024006484 &#xff08;论文地址&#xff09; &#xff08;看到4090&#xff0c;有点想劝退自己......&…...

局部和整体的关系

Prompt&#xff1a;为什么要研究局部和整体的关系呢&#xff1f;是因为很多情况下&#xff0c;局部就能表达出整体&#xff1f; 这是一个非常本质的问题&#xff0c;其实你已经接近数学和物理中“几何本质”的核心了。我们研究局部和整体的关系&#xff0c;是因为&#xff1a;…...

1.5 点云数据获取方式——双目立体相机

图1-5-1 双目立体相机 双目相机通过模拟人眼立体视觉,利用两个摄像头的视差信息计算物体深度,进而生成 3D 点云,具有成本低、体积小、信息丰富等优势,成为中...

Flume启动报错

报错1&#xff1a; 报错2&#xff1a; File Channel transaction capacity cannot be greater than the capacity of the channel capacit... 解决方案&#xff1a;删除配置...

leetcode 21. 合并两个有序链表(c++解法+相关知识点复习)

目录 题目 所需知识点复习 1.链表 1.1单链表 1.2哑结点&#xff08;Dummy Node&#xff09; 解答过程 1.循环双指针解法 2.递归解法 2025.4.29想到其他知识点会后续再继续补充。 题目 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表…...

链表反转_leedcodeP206

P206反转链表 原题 反转思路 将链表反转的过程分为两个区域&#xff1a; &#x1f7e6; 未反转区&#xff08;待处理&#xff09; 原链表中还没有处理&#xff08;还没有反转指针方向&#xff09;的部分&#xff0c;从 current 开始一直到链表尾部。 &#x1f7e9; 已反转…...

Laravel+API 接口

LaravelAPI 接口 网课连接&#xff1a;BIlibili. 中文文档. 1.RestFul Api编码风格 一、API设计 修改hosts&#xff0c;C:\Windows\System32\drivers\etc\hosts&#xff0c;增加127.0.0.1 api.lv8.com # Laravel 框架 用这个域名来测试&#xff08;推荐规范&#xff09; 在…...

在 Ubuntu 上离线安装 ClickHouse

在 Ubuntu 上离线安装 ClickHouse 的步骤如下: 一.安装验证 # 检查服务状态 sudo systemctl status clickhouse-server #删除默认文件 sudo rm /etc/clickhouse-server/users.d/default-password.xml # 使用客户端连接 clickhouse-client --password...

【AI微信小程序开发】掷骰子小程序项目代码:自设骰子数量和动画(含完整前端代码)

系列文章目录 【AI微信小程序开发】AI减脂菜谱小程序项目代码:根据用户身高/体重等信息定制菜谱(含完整前端+后端代码)【AI微信小程序开发】AI菜谱推荐小程序项目代码:根据剩余食材智能生成菜谱(含完整前端+后端代码)【AI微信小程序开发】图片工具小程序项目代码:图片压…...

Linux-02-VIM和VI编辑器

第一节:什么是VI和VIM编辑器: VI是Unix和类Unix操作系统中出现的通用的文本编辑器。VIM是从VI发展出来的一个性能更强大的文本编辑器可以主动的以字体颜色辨别语法的正确性,方便程序设计,VIM和VI编辑器完全兼容。使用:vi xxx文件 或者vim xxx文件,简单来说就是用来编辑文件的一…...

同为科技 智能PDU产品选型介绍-EN10/G801FR

随着各行业对数据中心机房重视程度的不断提高&#xff0c; 加强机柜微环境及电源计量、监控和管理则十分必要。在新型微模块化数据中心供配电系统建设中&#xff0c;UPS电源、智能PDU、监控管理系统、资产管理等产品早已成为IDC机房不可或缺的部分。其中&#xff0c;智能PDU通过…...

NS-SWIFT微调Qwen3

目录 一、NS-SWIFT简介 二、Qwen3简介 三、微调Qwen3 1、安装NS-SWIFT环境 2、准备训练数据 3、Lora微调 4、GROP训练 5、Megatron并行训练 一、NS-SWIFT简介 SWIFT&#xff08;Scalable lightWeight Infrastructure for Fine-Tuning&#xff09;是魔搭ModelScope开源社…...

借 AI 热潮,深挖 [风车 AI ] 为跨境电商打造的图片翻译黑科技

家人们&#xff0c;这几年 AI 技术简直像坐了火箭一样飞速发展&#xff0c;生活里、工作中到处都能看到它的身影。对咱们跨境行业来说&#xff0c;语言翻译一直是个让人头疼的大问题。今天咱就借着这股 AI 热潮&#xff0c;好好深挖一下风车 AI 为跨境打造的那些超厉害的翻译黑…...

uni-app 中封装全局音频播放器

在开发移动应用时&#xff0c;音频播放功能是一个常见的需求。无论是背景音乐、音效还是语音消息&#xff0c;音频播放都需要一个稳定且易于管理的解决方案。在 uni-app 中&#xff0c;虽然原生提供了 uni.createInnerAudioContext 方法用于音频播放&#xff0c;但直接使用它可…...

Uniapp:设置TabBar

目录 一、setTabBarBadge:增加文本二、removeTabBarBadge:移除文本三、showTabBarRedDot:显示红点四、hideTabBarRedDot:隐藏红点一、setTabBarBadge:增加文本 为 tabBar 某一项的右上角添加文本。 uni.setTabBarBadge({index: 0,text: 1 })参数类型必填说明indexNumber…...

如何查看k8s获取系统是否清理过docker镜像

k8s集群某个节点down掉后&#xff0c;pod就会漂移到其他节点&#xff0c;但是在该节点却又执行了拉取镜像操作&#xff0c;明明该节点之前部署过该容器的&#xff0c;不知为什么又拉取了一次镜像&#xff08;镜像拉取配置的优先使用本地&#xff09;&#xff0c;所以怀疑是触发…...

【Linux网络】深入解析I/O多路转接 - Select

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

如何解决 Xcode 签名证书和 Provisioning Profile 过期问题

在 iOS 应用开发过程中&#xff0c;签名证书和 Provisioning Profile 是确保应用安全性和合法性的关键组件。然而&#xff0c;当这些证书或配置文件过期时&#xff0c;开发者可能会遇到编译或归档失败的问题。本文将详细介绍如何解决 Xcode 中“iOS Distribution”证书未找到和…...

[C++]C++20协程的原理

文章目录 协程的状态机Promise 对象挂起和恢复机制协程的执行流程示例代码分析 C 协程是 C20 引入的一项重要特性&#xff0c;它提供了一种更简洁、高效的异步编程方式。下面从协程的状态机、Promise 对象、挂起和恢复机制等方面介绍其底层实现原理。 协程的状态机 从底层角度…...

Oracle OCP证书有效期是三年?

这一段时间&#xff0c;网上经常传出消息Oracle OCM认证证书有效期为三年&#xff0c;其实这个假消息&#xff0c;通过博睿谷与Oracle官方人员确认&#xff0c;OCP认证证书有效期是永久的。 OCP证书本身永久有效&#xff0c;但老版本的OCP证书代表着更多的项目经验&#xff0c…...

2025.4.29_STM32_看门狗WDG

1.WDG简介 大概意思就是给看门狗设置一个时间范围&#xff0c;在这个范围内必须喂狗(重置定时器)&#xff0c;这个操作必须一直执行&#xff0c;比如看门狗的的时间范围是1-2秒&#xff0c;我们就必须间隔1-2秒就喂一次狗&#xff0c;否则它自减到0时就会重置电路&#xff0c;相…...

基于Java,SpringBoot,HTML水文水质监测预警系统设计

摘要 随着水资源管理需求的日益增长&#xff0c;构建高效、精准的水文监测预警系统至关重要。本文设计并实现了一套基于 Java、SpringBoot 和 HTML 技术的水文监测预警系统。系统采用 Java 语言与 SpringBoot 框架搭建后端服务&#xff0c;利用其强大的业务逻辑处理能力与高效…...

Qt开发:JSON字符串的序列化和反序列化

文章目录 一、构建和解析单个JSON对象二、JSON对象中嵌套多个JSON对象三、JSON对象中组建多个数组对象四、构建和解析数组对象 一、构建和解析单个JSON对象 1.1 JSON对象的构建 使用key-value形式生成JSON对象 #include <QJsonObject> #include <QJsonDocument> …...

第10次:电商项目配置开发环境

本次内容主要为给整个电商项目配置好开发环境&#xff0c;包括如下环节&#xff1a; 创建电商项目xiaoyu_mall&#xff0c;Django版本默认是最新的大版本5.2配置应用目录&#xff0c;因项目会涉及到多个应用&#xff0c;为保证项目结构清晰&#xff0c;将在项目下建立apps目录…...

【强化学习系列】Q-learning——从贝尔曼最优方程谈起

引言 上一篇贝尔曼最优方程中我们已经推导出动作价值形式的贝尔曼最优方程&#xff1a; q π ∗ ( s , a ) ∑ s ′ ∈ S ∑ r ∈ R p ( s ′ , r ∣ s , a ) [ r γ max ⁡ a ′ q π ∗ ( s ′ , a ′ ) ] \begin{equation}q_{\pi^*}(s,a)\sum_{s\in S}\sum_{r\in R}p(s,…...

Java 基础--运算符全解析

【Java 基础】Java 运算符全解析&#xff1a;程序世界的“加减乘除”与“是非对错” 作者&#xff1a;IvanCodes 发布时间&#xff1a;2025年4月29日&#x1f423; 专栏&#xff1a;Java教程 嗨&#xff0c;各位 Java 探险家们&#xff01;&#x1f44b; 掌握了变量、数据类…...

【神经网络与深度学习】改变随机种子可以提升模型性能?

引言 随机种子在机器学习和数据处理领域中至关重要&#xff0c;它决定了模型训练、数据划分以及参数初始化的随机性。虽然固定随机种子能确保实验的可重复性&#xff0c;但改变随机种子有时会意外提升模型性能。本文将探讨这一现象的潜在原因&#xff0c;并揭示随机性如何影响…...

一页概览:统一数据保护方案

2010年左右手绘&#xff0c;用的是公司的信纸&#xff0c;签字笔&#xff0c;马克笔。方案为统一数据保护。其实解释备份软件加备份硬件&#xff08;支持重复数据删除&#xff09;的联合解决方案。...

Python中的itertools模块常见函数用法示例

itertools &#xff0c;迭代工具模块&#xff0c;提供了用于高效处理迭代器和组合问题的工具。 1. itertools.permutations(iterable, rNone) 功能&#xff1a;生成输入迭代器的所有可能排列。 参数&#xff1a; iterable&#xff1a;输入的可迭代对象。r&#xff1a;可选参数…...

微服务学习笔记

1 微服务 微服务&#xff1a;基于业务领域建模的、可独立发布的服务&#xff0c;把业务内聚的功能封装起来&#xff0c;并通过网络供其他服务访问。 好处&#xff1a; 技术异构性&#xff0c;不同服务可以使用不同的技术弹性&#xff0c;可以更好的处理服务不可用的问题扩展…...