• NET6 WebApi第5讲:中间件(源码理解,俄罗斯套娃怎么来的?);Web 服务器 (Nginx / IIS / Kestrel)、WSL、SSL/TSL

NET6 WebApi第5讲:中间件(源码理解,俄罗斯套娃怎么来的?);Web 服务器 (Nginx / IIS / Kestrel)、WSL、SSL/TSL

2025-05-01 23:00:10 0 阅读

一、NET6的启动流程

区别:

.NET6 WebApi第1讲:VSCode开发.NET项目、区别.NET5框架【两个框架启动流程详解】_vscode webapi-CSDN博客

2、WebApplicationBuilder:是NET6引入的一个类,是建造者模式的典型应用

1>建造者模式的核心思想

  • 将一个复杂对象的构建过程分解为多个步骤。

  • 通过一个“建造者”对象逐步配置和构建最终的对象。

2>WebApplicationBuilder代码如下图

        先创建一个Buider(得到建造者)——再build生成一下(得到一个Web应用程序)——最后Run得到想要得到的东西

二、管道——服务器处理客户端请求 的各个环节

1、Http请求响应流程

2、Web 服务器 (Nginx / IIS / Kestrel)

1>Nginx:高性能 Web 服务器和反向代理,跨平台。

        Nginx 以高性能和低资源消耗著称,适用于处理大量并发连接。

1》反向代理(区别正向代理)

1)反向代理:代理的是服务器,保护服务器并提升服务器性能。

        一种代理服务器,它位于客户端和服务器之间,代表服务器接收和处理来自客户端的请求,然后将响应返回给客户端。

        重点:客户端并不知道真正的后端服务器,只知道反向代理服务器。

2)正向代理:代理的是客户端,帮助客户端访问外部网络或受限资源。

3)两者区别:除了代理对象不同,还有使用目的不同

  • 正向代理:主要用于访问受限资源、保护客户端隐私和加速访问。
    • 假设你身处一个网络环境受限的地方,无法直接访问某些国外网站(如Google)。这时,你可以使用正向代理服务器来绕过这些限制。
    • 你配置了一个可以访问Google的正向代理服务器。你通过浏览器设置代理服务器的地址和端口,然后再次访问Google。
  • 反向代理:主要用于负载均衡、安全防护、缓存加速等,提升服务器性能和安全性。
    • 假设你是一家电商网站的管理员,你的网站每天有大量的用户访问。为了提升网站的性能和安全性,你决定使用反向代理服务器。
    • 代理服务器接收请求:用户的请求首先到达反向代理服务器。反向代理服务器作为网站的入口,接收并处理所有来自用户的请求。
    • 代理服务器转发请求:反向代理服务器根据配置的策略(如负载均衡、缓存等),将请求转发给内部的真实服务器。

2>IIS:微软提供的 Web 服务器,仅限 Windows。

它提供全面的企业级功能,包括负载均衡、安全性配置、身份验证等。

3>Kestrel: 轻量级 ASP.NET Core Web 服务器,跨平台。

Kestrel 是轻量级且专为 ASP.NET Core 设计的服务器,适合作为反向代理后的应用服务器。

Kestrel与反向代理(如 Nginx)配合使用)

3、【题外话】开发工具:WSL

  • 提供完整的 Linux 内核接口,允许用户在 Windows 上直接运行 Linux 环境。
  • 无需虚拟机,性能接近原生 Linux。
  • 主要用于开发、测试和运行 Linux 应用。

4、【题外话】安全协议(SSL/TSL):TLS 基于 SSL 3.0 开发,是 SSL 的升级版。

SSL(Secure Sockets Layer,安全套接层)是一种用于网络通信的安全协议,主要用于加密和验证数据传输,确保通信的安全性和完整性。SSL证书是实现SSL/TLS(Transport Layer Security)加密的关键,它由受信任的证书颁发机构(CA)签发,用于验证服务器的身份并确保客户端与服务器之间的通信安全

在.NET Core项目中,SSL通常与HTTPS(HTTP Secure)结合使用,用于保护Web应用程序的数据传输安全。

HTTPS通过SSL/TLS协议对数据进行加密,防止数据在传输过程中被窃听、篡改或伪造。

5、什么是管道?——管道配置=请求级的处理

1>为什么 管道配置=请求级的处理 ?

如上图,把所有管道配置都注释了,运行代码。

1)如下图

如果啥也不配置,针对没监听的8005端口,出现“无法访问”,代表是没有响应的。

2)如下下图

针对监听的域名+端口7007,出现“找不到”,则代表服务器是有响应的,只是响应的是404,没有资源(返回没有任何东西)。

3)由此,证明上图的“管道配置是请求级的处理”。

三、参考二、中“没有管道配置”的情况,我们该如何配置管道?

1、看扩展Extensions

项目代码第4讲:不用Token进行登录(前+后端)、仿照项目代码的逻辑自己实现Token(权限identity、日志Logger)、Swagger如何接收Token?扩展Extensions(静态类)_getwey登录接口不用token-CSDN博客

2、如何配置管道?——都是基于IApplicationBuilder 来配置的

1>管道配置都是基于IApplicationBuilder的,同时有一个Use

如下图,假设配置app.UseHttpsRidirection();

把光标移动到UseHttpsRidirection,按住Fn+F12,航到该扩展方法的定义位置,如下下图。

由下图可知,UseHttpsRidirection配置是基于IApplicationBuilder的,同时有一个Use

2>WebApplication也是继承自IApplicationBuilder,也有一个Use

3、什么是IApplicationBuilder?——(ApplicationBuilder的接口)用于配置请求处理管道的接口

1>IApplicationBuilder 是 ApplicationBuilder的接口。、

2>IApplicationBuilder代码解释(先new,再Use,最后Run(Build)一下)

如下图,可知IApplicationBuilder也是一个建造者模式(见一、)

1》必然会New【是隐式的(框架自动完成),看源代码就知道这里是构造函数!!】:得到一个IApplicationBuilder对象

2》配置需要做的事:利用这个对象配置自己需要做的事,即下图中的Use(...)

3》最后的Build下隐式的,藏在app.Run()中
1)阅读app.Run()的源码,如下图

        可以看到在app.Run()里面,最后还会执行一次Build

2)区别 配置管道前面的“var app = builder.Build();”。实际例子见六、1、

和上述1)都是执行的同一个ApplicationBuilder里的Build方法,只是作用不同!

《1》var app = builder.Build();作用:

        Build 方法返回的 RequestDelegate 只是一个默认的 404 处理逻辑,并没有包含任何中间件。

《2》app.Run()里的作用:

        里面实际上会再次调用 Build 方法,以确保所有的中间件都被正确地组合到请求处理管道中。

4、综上,配置管道的方法:基于IApplicationBuilder,

先new()【隐式的】,

再Use,

最后Run(Build)一下【隐式的,藏在app.Run()中。注意区别 配置管道前面的“var app = builder.Build();”】

四、配置管道举例

1、管道配置的源码

通过WebApplication,如下下图蓝色框

 

展开上图最后一条方法,如下图。这个方法的作用是“Adds the middleware to the application request pipeline.”(将中间件添加到应用程序请求管道。)

        Func的第一个RequestDelegate是返回类型,第二个RequestDelegate是接收的参数类型。代表“接受一个RequestDelegate并返回一个新的RequestDelegate”

        注意:RequestDelegate需要接受一个参数,如下图是RequestDelegate的源代码

2、单个管道配置

1>写出一个管道配置:也是基于IApplicationBuilder,先new(),再Use,最后Run(Build)一下

1》解释上图的next和context
1)上图中的next 和 context 都是传入的参数,但它们的来源和作用不同。

Func 是一个函数委托,它接收一个 RequestDelegate(即 next)作为输入,并返回一个新的 RequestDelegate

  • next 是输入参数,代表管道中的下一个中间件(或默认的 404 处理逻辑)。

  • 返回值是一个新的 RequestDelegate,它是一个接收 HttpContext(即 context)并返回 Task 的委托。

2)每个中间件的 context 参数都是同一个 HttpContext 对象

《1》context 是什么?——HttpContext 对象,它代表当前 HTTP 请求的上下文

  • 它包含了请求的所有信息(如请求头、请求体、路径、查询参数等)和响应的相关信息(如状态码、响应头、响应体等)。

《2》 context 是什么时候创建的?——由 ASP.NET Core 框架在请求到达时创建的

  • 具体来说,当 HTTP 请求到达服务器时,ASP.NET Core 的服务器层(如 Kestrel)会解析请求,并创建一个 HttpContext 对象。

  • 这个 HttpContext 对象会被传递给中间件管道,作为管道的入口参数。

《3》 为什么每个中间件的 context 是同一个对象?

  • HttpContext 是请求的上下文对象,它在请求的整个生命周期中保持不变。

  • 中间件管道是一个链式结构,每个中间件都会接收同一个 HttpContext 对象,并在其基础上进行操作。

  • 所有中间件可以共享和修改请求和响应的状态。

  • 例如:

    • Middleware1 可以修改 context.Response 的状态码。

    • Middleware2 可以读取 context.Request 的请求头。

    • Middleware3 可以向 context.Response 写入响应体。

《4》context 是如何传递给中间件的?【app是什么?详细见3、】

  • 在 Build 方法中,app 是一个 RequestDelegate,它接收 HttpContext 作为参数。

  • 当请求到达时,ASP.NET Core 框架会调用 app,并将 HttpContext 作为参数传递给它。

  • 每个中间件的 Invoke 方法都会接收这个 HttpContext 对象,并将其传递给下一个中间件(通过 await next(context))。

2>开始简化单个管道配置的代码

简化上图,省略new()。如下图

再简化上图,可以去掉大括号{}和 return(下图红框中的)【因为是直接返回一个context,后面没有其它的代码。去掉的原理 在下述链接的 Lambda委托 部分】C#第6讲:集合ArrayList、List;字典Dictionary;foreach遍历;Func<,>函数(委托/Lambda )_c# dictionary foreach-CSDN博客

再简化上图,变成异步版本。即加上async和await,把return Task.Run()去掉。如下图

最后加上Use部分,运行代码。(只加了这一个中间件)

3>运行代码,显示结果

如下图,无论在哪个路由,只要域名和端口正确了,就会显示(上图)管道中的信息。

再次证明二、中的“管道配置是请求级的处理”。

3、多个管道配置

由上图可知,把"app.Use(里面的变量)"替换成上面的"变量="的东西,如下图

在各个管道间加入"await next.Invoke(context)",如下图,右边是运行结果的截图

配置管道的过程(代码从上到下)=下列的每个圈(从外画到内),管道执行过程=下图的箭头

五、管道执行过程 如何做到 套娃?——【前提】Use、Build方法的源码解读

1、看aspnetcore的源码:注意核心源码在src文件中

搜出来的第一个就是

如下图,选择需要下载的版本

2、查看中间件的源码,先看Use方法

为了要看清楚Use里面为什么是这个变化,就要去找"app"

如下图,app就是WebApplication

打开1>中下载的aspnetcore源码,核心源码在src中

如下图,直接在src文件中搜索“Application”

打开了源码,如下图

1>在WebApplication源码中查找Use方法

为什么找Use方法?——如下图

找到源码如下图,发现源码调用到ApplicationBuilder 的 Use方法

2>在ApplicationBuilder源码中查找Use方法

aspnetcore源码的src文件中 查找 ApplicationBuilder的源码

3>总结上述过程:按照代码Use的先后顺序,把中间件添加到_components集合中。

举例:

假设有三个中间件,分别是 Middleware1、Middleware2 和 Middleware3。它们的添加顺序如下:

app.Use(Middleware1);
app.Use(Middleware2);
app.Run(Middleware3);

那么_components 列表中的顺序是 [Middleware1, Middleware2, Middleware3]

3、查看中间件的源码,再看Build方法

在ApplicationBuilder的源码中找到Build方法,如下图

1>上图中上面的蓝框部分:定义了一个响应404的委托("app"是方法,可以用Invoke调用)

1》具体作用

  • 如果请求到达了管道的末尾(即没有中间件处理请求),它会检查是否有未执行的终结点(endpoint)。如果有,抛出异常;否则,返回 404 状态码。

2》context参数是什么?

  •  是 HttpContext 对象,它代表当前 HTTP 请求的上下文。这个 context 是由 ASP.NET Core 框架在请求到达时创建并传递给中间件管道的。

3》下图中的message部分:“$”是插值表达式

  • 如果请求到达了管道的末尾而没有执行终点:'{endpoint.DisplayName}'。如果您正在使用路由,请使用'{IApplicationBuilder}.UseEndpoints(...)'注册终点中间件。

2>上上图中下面的蓝框部分:添加一个委托集合的循环

1》app = _components[c](app); 的含义
  • _components[c] 是当前中间件的配置函数,就是2、中的_components参数,如下图

  • app 是当前管道的入口(即下一个中间件)。

  • _components[c](app) 调用当前中间件的配置函数,并返回一个新的 RequestDelegate,表示当前中间件处理后的管道。

  • 通过 app = _components[c](app);,将当前中间件“包裹”到管道中。

2》举例

下图中,假设_components.Count=3,那么按照for循环,先取的是下图右边位置为"2"的第三个委托。

下图代码其实是省略了Invoke,完整的这句话应该是:

        app = _components[c].Invoke(app);

六、管道执行过程 如何做到 套娃?——具体分析过程

1 、整体分析Program.cs里面所有代码的运行过程

先要看五、,知道Use和Build方法的源码作用。

把Program.cs里的代码完整显示出来(如下图),开始按照代码运行顺序分析。

1>第一次执行Buid方法:var app= builder.Build();

Build方法的源码如下图。

  • 执行下图的红框部分:此时因为没有调用过 Use 方法添加任何中间件,所以_components 列表是空的。
  • 执行下图的蓝框部分:因此,Build 方法返回的 RequestDelegate 只是一个简单的委托,即默认的 404 处理逻辑。

2>每次调用 Use 方法时,都会将一个新的中间件按顺序添加到 _components 列表中

在 app.UseRouting() 和 app.UseEndpoints(...) 调用后,_components 列表中包含了路由和端点中间件。

3>app.Run();的源码中包括再次调用Build方法 【见三、3、2>3》】

当 app.Run() 启动应用程序时,Build 方法会被再次调用,此时 _components 列表中已经包含了所有的中间件,因此请求处理管道会被正确地构建。

2、结合项目代码分析(具体分析上述3>,再次调用Build方法)

配置三个中间件,如下图

上图的next和context分别代表什么?——见四、2、1>1》2),这里需要的是其中的《4》,如下

《4》 context 是如何传递给中间件的?

  • 在 Build 方法中,app 是一个 RequestDelegate,它接收 HttpContext 作为参数。

  • 当请求到达时,ASP.NET Core 框架会调用 app,并将 HttpContext 作为参数传递给它。

  • 每个中间件的 Invoke 方法都会接收这个 HttpContext 对象,并将其传递给下一个中间件(通过 await next(context))。

1>初始化:默认的 404 处理逻辑

        ASP.NET Core 框架在请求到达时会创建一个context(HttpContext 对象),它代表当前 HTTP 请求的上下文)。

        所以会有一个默认的 404 处理逻辑。用于处理请求到达管道末尾但没有匹配到任何端点的情况(返回 404 状态码)。

2>按照上图中下面红框的for循环,先取出第三个中间件Middleware3

        下图中,next就是传入的参数(上一次循环的结果,此处是初始化的默认 404 处理逻辑),

                        另一个传入的参数context:  ASP.NET Core 框架在请求到达时自动创建的,所有中间件用的context是同一个 HttpContext 对象。

第一次循环(c = 2Middleware3

app = Middleware3.Invoke(app);
  • 在第一次 for 循环时,app (后面的那个)是初始化的默认 404 处理逻辑。

  • Middleware3.Invoke(app) 会将当前的 app(即默认的 404 处理逻辑)作为 next 参数传递给 Middleware3

  • Middleware3 返回一个新的 RequestDelegate,这个委托会执行 Middleware3 的逻辑,但不会调用 next(即默认的 404 处理逻辑)。

2》第二次循环(c = 1Middleware2
app = Middleware2.Invoke(app);
  • app(后面的那个)现在是 Middleware3 返回的 RequestDelegate

  • app(后面的那个) 被传递给 Middleware2 的 Invoke 方法。

  • Middleware2 返回一个新的 RequestDelegate,这个委托会先执行 Middleware2 的前逻辑,然后调用 app(即 Middleware3 的逻辑),最后执行 Middleware2 的后逻辑。

3》第三次循环(c = 0Middleware1
app = Middleware1.Invoke(app);
  • app (后面的那个)现在是 Middleware2 返回的 RequestDelegate

  • app (后面的那个)被传递给 Middleware1 的 Invoke 方法。

  • Middleware1 返回一个新的 RequestDelegate,这个委托会先执行 Middleware1 的前逻辑,然后调用 app(即 Middleware2 的逻辑),最后执行 Middleware1 的后逻辑。

 4>综上,这就是俄罗斯套娃的由来

1》 如下图,第一次循环是最里面那个圈(对应第三个中间件)。

        嵌套的委托,体现在里面的圈 被 外面的圈 包围。

        Http管道请求从下图的左到右,每个中间件的逻辑 体现在 请求开始(下图蓝线前)接触到的线;逻辑 体现在 请求在(下图蓝线后)接触到的线

2》对应下图,就是管道先添加进去的第一次循环(第三个中间件),是最里面绿色的那圈。

区别代码顺序:配置管道的过程(代码从上到下)=下列的每个圈(从外画到内),管道执行过程=下图的箭头

本文地址:https://www.vps345.com/6939.html

搜索文章

Tags

PV计算 带宽计算 流量带宽 服务器带宽 上行带宽 上行速率 什么是上行带宽? CC攻击 攻击怎么办 流量攻击 DDOS攻击 服务器被攻击怎么办 源IP 服务器 linux 运维 游戏 云计算 javascript 前端 chrome edge llama 算法 opencv 自然语言处理 神经网络 语言模型 deepseek Ollama 模型联网 API CherryStudio ubuntu RTSP xop RTP RTSPServer 推流 视频 数据库 centos oracle 关系型 安全 分布式 科技 ai java 人工智能 个人开发 python MCP 进程 操作系统 进程控制 Ubuntu ssh 阿里云 网络 网络安全 网络协议 harmonyos 华为 开发语言 typescript 计算机网络 运维开发 云原生 Flask FastAPI Waitress Gunicorn uWSGI Uvicorn pip conda ui 华为云 华为od HarmonyOS Next YOLO efficientVIT YOLOv8替换主干网络 TOLOv8 宝塔面板访问不了 宝塔面板网站访问不了 宝塔面板怎么配置网站能访问 宝塔面板配置ip访问 宝塔面板配置域名访问教程 宝塔面板配置教程 vue.js audio vue音乐播放器 vue播放音频文件 Audio音频播放器自定义样式 播放暂停进度条音量调节快进快退 自定义audio覆盖默认样式 macos adb ssl EtherCAT转Modbus ECT转Modbus协议 EtherCAT转485网关 ECT转Modbus串口网关 EtherCAT转485协议 ECT转Modbus网关 fastapi mcp mcp-proxy mcp-inspector fastapi-mcp agent sse android 鸿蒙 物联网 tcp/ip mcu iot 信息与通信 filezilla 无法连接服务器 连接被服务器拒绝 vsftpd 331/530 智能路由器 外网访问 内网穿透 端口映射 面试 性能优化 jdk intellij-idea 架构 asm numpy 嵌入式 linux驱动开发 arm开发 嵌入式硬件 rust http Qwen2.5-coder 离线部署 计算机外设 电脑 mac 软件需求 ollama 大模型 c# .netcore github 创意 社区 pycharm ide live555 源码剖析 rtsp实现步骤 流媒体开发 ue5 vr c++ Dify cpu 内存 实时 使用 机器学习 go 代理模式 ipython 后端 微信 微信分享 Image wxopensdk 目标检测 windows vscode 编辑器 react.js 前端面试题 node.js 持续部署 笔记 YOLOv8 NPU Atlas800 A300I pro asi_bench AI 爬虫 数据集 统信UOS 麒麟 bonding 链路聚合 gpu算力 chatgpt llama3 Chatglm 开源大模型 数据结构 学习 c语言 经验分享 学习方法 ddos qt stm32项目 单片机 stm32 debian PVE zotero WebDAV 同步失败 Dell R750XS 温湿度数据上传到服务器 Arduino HTTP git elasticsearch udp unity dell服务器 golang 命名管道 客户端与服务端通信 WSL2 mysql tomcat 开源 sql KingBase unix websocket ai小智 语音助手 ai小智配网 ai小智教程 智能硬件 esp32语音助手 diy语音助手 docker 容器 oceanbase rc.local 开机自启 systemd GaN HEMT 氮化镓 单粒子烧毁 辐射损伤 辐照效应 uni-app 银河麒麟 kylin v10 麒麟 v10 C 环境变量 进程地址空间 php 大数据 数据挖掘 网络用户购物行为分析可视化平台 大数据毕业设计 1024程序员节 智能手机 NAS Termux Samba Linux 深度学习 安装教程 GPU环境配置 Ubuntu22 CUDA PyTorch Anaconda安装 postman mock mock server 模拟服务器 mock服务器 Postman内置变量 Postman随机数据 protobuf 序列化和反序列化 安装 spring boot .net pytorch Windsurf nginx dubbo word图片自动上传 word一键转存 复制word图片 复制word图文 复制word公式 粘贴word图文 粘贴word公式 僵尸进程 flask AI编程 AIGC json java-ee C# MQTTS 双向认证 emqx 政务 分布式系统 监控运维 Prometheus Grafana vim jar gradle VMware安装mocOS VMware macOS系统安装 ESP32 camera Arduino 电子信息 sqlserver tcpdump 计算机视觉 Agent 豆瓣 追剧助手 迅雷 nas 前端框架 LDAP 产品经理 agi microsoft aws googlecloud vSphere vCenter 软件定义数据中心 sddc jmeter 软件测试 HCIE 数通 maven intellij idea rpc gateway Clion Nova ResharperC++引擎 Centos7 远程开发 YOLOv12 pillow kubernetes html5 firefox WSL win11 无法解析服务器的名称或地址 rust腐蚀 rag ragflow ragflow 源码启动 迁移指南 DevEco Studio ffmpeg 音视频 MacOS录屏软件 程序人生 cuda cudnn anaconda 微服务 springcloud 向日葵 DeepSeek-R1 API接口 客户端 rtsp rtp flutter Hyper-V WinRM TrustedHosts ESXi 自动化 jenkins mount挂载磁盘 wrong fs type LVM挂载磁盘 Centos7.9 鸿蒙系统 vue3 HTML audio 控件组件 vue3 audio音乐播放器 Audio标签自定义样式默认 vue3播放音频文件音效音乐 自定义audio播放器样式 播放暂停调整声音大小下载文件 apache 课程设计 redis threejs 3D AI写作 prompt xrdp 远程桌面 远程连接 系统架构 string模拟实现 深拷贝 浅拷贝 经典的string类问题 三个swap SenseVoice 开发环境 SSL证书 fd 文件描述符 蓝耘科技 元生代平台工作流 ComfyUI log4j 虚拟化 半虚拟化 硬件虚拟化 Hypervisor trae odoo 服务器动作 Server action NPS 雨云服务器 雨云 spring 能力提升 面试宝典 技术 IT信息化 环境迁移 thingsboard postgresql wsl2 wsl 毕设 机器人 多层架构 解耦 mq rabbitmq rocketmq kafka outlook IIS .net core Hosting Bundle .NET Framework vs2022 直播推流 r语言 数据可视化 bash svn DeepSeek 分析解读 状态管理的 UDP 服务器 Arduino RTOS yum django W5500 OLED u8g2 TCP服务器 openEuler 驱动开发 gitea Open WebUI 媒体 微信公众平台 eureka C语言 测试工具 k8s集群资源管理 云原生开发 jupyter jellyfin html css Docker Hub docker pull 镜像源 daemon.json Invalid Host allowedHosts vue fpga开发 Wi-Fi devops ci/cd DNS LLM 大模型面经 职场和发展 Deepseek 大模型学习 AnythingLLM AnythingLLM安装 压力测试 kylin express 缓存 openvpn server openvpn配置教程 centos安装openvpn 小艺 Pura X 低代码 excel mybatis zabbix 云电竞 云电脑 todesk OD机试真题 华为OD机试真题 服务器能耗统计 rime 远程工作 transformer ping++ 智能音箱 智能家居 webrtc dba redhat 并查集 leetcode 宝塔面板 部署 负载均衡 prometheus shell 磁盘监控 监控k8s集群 集群内prometheus 服务器配置 VMware安装Ubuntu Ubuntu安装k8s k8s 网络结构图 硬件架构 list gpt 信号处理 网络药理学 生信 生物信息学 gromacs 分子动力学模拟 MD 动力学模拟 测试用例 功能测试 ansible playbook 剧本 hadoop https RAGFLOW vmware 卡死 远程 命令 执行 sshpass 操作 web安全 Cline 自动化编程 openwrt ssh漏洞 ssh9.9p2 CVE-2025-23419 ArcTS 登录 ArcUI GridItem arkUI ros2 moveit 机器人运动 gitee 博客 rdp 实验 王者荣耀 交换机 硬件 设备 GPU PCI-Express Google pay Apple pay 微信小程序 小程序 n8n dity make okhttp wireshark 显示过滤器 ICMP Wireshark安装 Linux无人智慧超市 LInux多线程服务器 QT项目 LInux项目 单片机项目 UOS 统信操作系统 android studio 交互 pygame telnet 远程登录 交叉编译 其他 selenium 消息队列 深度优先 图论 并集查找 换根法 树上倍增 SSH llm 实战案例 p2p k8s资源监控 annotations自动化 自动化监控 监控service 监控jvm visual studio code 视觉检测 游戏机 VMware创建虚拟机 小游戏 五子棋 线程 多线程 SWAT 配置文件 服务管理 网络共享 gaussdb 华为认证 网络工程师 拓扑图 webstorm ruoyi DeepSeek行业应用 Heroku 网站部署 AI大模型 linux上传下载 IIS服务器 IIS性能 日志监控 react next.js 部署next.js 腾讯云 无人机 nvidia 程序员 ocr TRAE 游戏程序 ios micropython esp32 mqtt 自动驾驶 P2P HDLC 思科 nuxt3 实时音视频 软件工程 强制清理 强制删除 mac废纸篓 dify Ark-TS语言 mysql离线安装 ubuntu22.04 mysql8.0 spring cloud 源码 毕业设计 串口服务器 混合开发 环境安装 JDK 银河麒麟服务器操作系统 系统激活 数据分析 RAID RAID技术 磁盘 存储 算力 命令行 基础入门 编程 高效远程协作 TrustViewer体验 跨设备操作便利 智能远程控制 Trae AI代码编辑器 hive Hive环境搭建 hive3环境 Hive远程模式 hibernate cmos centos-root /dev/mapper yum clean all df -h / du -sh 实时互动 windwos防火墙 defender防火墙 win防火墙白名单 防火墙白名单效果 防火墙只允许指定应用上网 防火墙允许指定上网其它禁止 京东云 重启 排查 系统重启 日志 原因 同步 备份 建站 安全威胁分析 chrome 浏览器下载 chrome 下载安装 谷歌浏览器下载 grafana IPMI KylinV10 麒麟操作系统 虚拟机 Vmware 漏洞 gpt-3 文心一言 kind 设计模式 etcd 数据安全 RBAC unity3d 企业微信 Linux24.04 deepin 网络穿透 云服务器 金融 Xterminal 腾讯云大模型知识引擎 bug 弹性计算 裸金属服务器 弹性裸金属服务器 iBMC UltraISO 致远OA OA服务器 服务器磁盘扩容 gitlab CORS 跨域 产测工具框架 IMX6ULL 管理框架 系统开发 binder 车载系统 framework 源码环境 飞牛NAS 飞牛OS MacBook Pro dns 大模型入门 恒源云 报错 Java Ubuntu Server Ubuntu 22.04.5 开发 mamba Vmamba docker搭建nacos详解 docker部署nacos docker安装nacos 腾讯云搭建nacos centos7搭建nacos arm springboot远程调试 java项目远程debug docker远程debug java项目远程调试 springboot远程 Reactor C++ 大模型微调 JAVA sqlite MS Materials openssl 密码学 监控 自动化运维 code-server MQTT mosquitto lio-sam SLAM uv wps 安卓 iftop 网络流量监控 AISphereButler kamailio sip VoIP mariadb 大数据平台 echarts 信息可视化 网页设计 多进程 AP配网 AK配网 小程序AP配网和AK配网教程 WIFI设备配网小程序UDP开 Node-Red 编程工具 流编程 CentOS Stream CentOS 工作流 workflow linux安装配置 firewalld Java Applet URL操作 服务器建立 Socket编程 网络文件读取 大模型教程 remote-ssh 蓝桥杯 ecmascript KVM 国产操作系统 ukui 麒麟kylinos openeuler 中间件 可信计算技术 安全架构 网络攻击模型 统信 虚拟机安装 框架搭建 pdf RustDesk自建服务器 rustdesk服务器 docker rustdesk web3.py VPS pyqt Cookie 微信小程序域名配置 微信小程序服务器域名 微信小程序合法域名 小程序配置业务域名 微信小程序需要域名吗 微信小程序添加域名 arcgis 开机自启动 RTMP 应用层 系统安全 Portainer搭建 Portainer使用 Portainer使用详解 Portainer详解 Portainer portainer 服务器主板 AI芯片 virtualenv 飞书 ue4 着色器 虚幻 孤岛惊魂4 WebRTC pyautogui Redis Desktop ux mongodb yum源切换 更换国内yum源 Python 网络编程 聊天服务器 套接字 TCP Socket QQ bot Docker IPMITOOL BMC 硬件管理 opcua opcda KEPServer安装 oneapi 游戏服务器 TrinityCore 魔兽世界 asp.net大文件上传 asp.net大文件上传源码 ASP.NET断点续传 asp.net上传文件夹 asp.net上传大文件 .net core断点续传 .net mvc断点续传 CH340 串口驱动 CH341 uart 485 代码调试 ipdb adobe 传统数据库升级 银行 大语言模型 LLMs 群晖 文件分享 iis 多线程服务器 Linux网络编程 云服务 springsecurity6 oauth2 授权服务器 token sas FTP 服务器 矩阵 医疗APP开发 app开发 服务器管理 配置教程 服务器安装 网站管理 NFS matplotlib 服务器数据恢复 数据恢复 存储数据恢复 raid5数据恢复 磁盘阵列数据恢复 图像处理 远程控制 远程看看 远程协助 visualstudio 银河麒麟操作系统 国产化 工业4.0 进程信号 safari Mac 系统 CLion IDE rsyslog 硬件工程 微信开放平台 微信公众号配置 三级等保 服务器审计日志备份 kali 共享文件夹 AI 原生集成开发环境 Trae AI ollama下载加速 服务器繁忙 嵌入式实习 黑客技术 流式接口 本地部署 api linux 命令 sed 命令 DigitalOcean GPU服务器购买 GPU服务器哪里有 GPU服务器 Kylin-Server RoboVLM 通用机器人策略 VLA设计哲学 vlm fot robot 视觉语言动作模型 具身智能 matlab EasyConnect bootstrap Kali Linux 黑客 渗透测试 信息收集 springboot nextjs reactjs 模拟实现 单元测试 集成测试 CPU 主板 电源 网卡 压测 ECS ssrf 失效的访问控制 灵办AI kvm 权限 npm elk edge浏览器 vue-i18n 国际化多语言 vue2中英文切换详细教程 如何动态加载i18n语言包 把语言json放到服务器调用 前端调用api获取语言配置文件 minicom 串口调试工具 SRS 流媒体 直播 飞牛nas fnos 推荐算法 图形化界面 数据库架构 数据管理 数据治理 数据编织 数据虚拟化 换源 国内源 Debian Deepseek-R1 私有化部署 推理模型 端口测试 yolov8 tensorflow 自动化测试 性能测试 田俊楠 Kali 渗透 GCC crosstool-ng 常用命令 文本命令 目录命令 崖山数据库 YashanDB python3.11 视频编解码 Xinference RAGFlow Ubuntu 24.04.1 轻量级服务器 版本 gcc dash 正则表达式 pgpool ruby 计算机 高效日志打印 串口通信日志 服务器日志 系统状态监控日志 异常记录日志 免费域名 域名解析 minio 相差8小时 UTC 时间 docker命令大全 netty DocFlow 远程过程调用 Windows环境 ubuntu24 vivado24 ip命令 新增网卡 新增IP 启动网卡 es jvm Jellyfin swoole FTP服务器 边缘计算 Linux的权限 怎么卸载MySQL MySQL怎么卸载干净 MySQL卸载重新安装教程 MySQL5.7卸载 Linux卸载MySQL8.0 如何卸载MySQL教程 MySQL卸载与安装 无桌面 risc-v Ubuntu22.04 开发人员主页 trea idea 我的世界 我的世界联机 数码 软考 Ubuntu 24 常用命令 Ubuntu 24 Ubuntu vi 异常处理 联想开天P90Z装win10 rustdesk langchain deep learning 监控k8s 监控kubernetes web 健康医疗 MacMini 迷你主机 mini Apple 执法记录仪 智能安全帽 smarteye 宠物 免费学习 宠物领养 宠物平台 c 键盘 SysBench 基准测试 互信 ecm bpm 鲲鹏 昇腾 npu 宕机切换 服务器宕机 Claude qemu libvirt 音乐服务器 Navidrome 音流 MCP server C/S windows日志 Minecraft DOIT 四博智联 反向代理 cnn DenseNet 北亚数据恢复 oracle数据恢复 CrewAI GoogLeNet H3C iDRAC R720xd 搜索引擎 程序员创富 freebsd VR手套 数据手套 动捕手套 动捕数据手套 can 线程池 金仓数据库 2025 征文 数据库平替用金仓 XCC Lenovo 增强现实 沉浸式体验 应用场景 技术实现 案例分析 AR 繁忙 解决办法 替代网站 汇总推荐 AI推理 Linux awk awk函数 awk结构 awk内置变量 awk参数 awk脚本 awk详解 saltstack USB网络共享 输入法 embedding av1 电视盒子 机顶盒ROM 魔百盒刷机 聊天室 前后端分离 ssh远程登录 3d 数学建模 远程服务 skynet 服务器无法访问 ip地址无法访问 无法访问宝塔面板 宝塔面板打不开 IM即时通讯 剪切板对通 HTML FORMAT XFS xfs文件系统损坏 I_O error 5G 3GPP 卫星通信 file server http server web server 阿里云ECS 云桌面 微软 AD域控 证书服务器 LORA NLP muduo 个人博客 X11 Xming 稳定性 看门狗 keepalived 集成学习 sonoma 自动更新 centos 7 docker run 数据卷挂载 交互模式 xshell termius iterm2 uni-file-picker 拍摄从相册选择 uni.uploadFile H5上传图片 微信小程序上传图片 neo4j 数据仓库 数据库开发 database FunASR ASR 技能大赛 chrome devtools chromedriver selete 高级IO Cursor 阻塞队列 生产者消费者模型 服务器崩坏原因 jetty undertow grub 版本升级 扩容 eNSP 网络规划 VLAN 企业网络 less ISO镜像作为本地源 linux环境变量 小番茄C盘清理 便捷易用C盘清理工具 小番茄C盘清理的优势尽显何处? 教你深度体验小番茄C盘清理 C盘变红?!不知所措? C盘瘦身后电脑会发生什么变化? Docker引擎已经停止 Docker无法使用 WSL进度一直是0 镜像加速地址 MNN Qwen ip 人工智能生成内容 备份SQL Server数据库 数据库备份 傲梅企业备份网络版 DBeaver kerberos 磁盘镜像 服务器镜像 服务器实时复制 实时文件备份 searxng Erlang OTP gen_server 热代码交换 事务语义 PPI String Cytoscape CytoHubba 图形渲染 openstack Xen pppoe radius 黑苹果 hugo Netty 即时通信 NIO sdkman sequoiaDB tidb GLIBC HTTP 服务器控制 ESP32 DeepSeek Docker Compose docker compose docker-compose dns是什么 如何设置电脑dns dns应该如何设置 银河麒麟桌面操作系统 Kylin OS MQTT协议 消息服务器 代码 在线预览 xlsx xls文件 在浏览器直接打开解析xls表格 前端实现vue3打开excel 文件地址url或接口文档流二进 alias unalias 别名 互联网医院 AI作画 信创 信创终端 中科方德 prometheus数据采集 prometheus数据模型 prometheus特点 AI agent 相机 Playwright 思科模拟器 Cisco sqlite3 vasp安装 nac 802.1 portal QT 5.12.12 QT开发环境 Ubuntu18.04 wordpress 无法访问wordpess后台 打开网站页面错乱 linux宝塔面板 wordpress更换服务器 ROS qt项目 qt项目实战 qt教程 单例模式 聚类 国标28181 视频监控 监控接入 语音广播 流程 SIP SDP 程序 性能分析 xml Radius 数据库系统 EMQX 通信协议 计算虚拟化 弹性裸金属 虚拟显示器 本地化部署 银河麒麟高级服务器 外接硬盘 Kylin yaml Ultralytics 可视化 考研 物联网开发 虚拟局域网 ceph 社交电子 flash-attention vscode 1.86 私有化 显卡驱动 英语 直流充电桩 充电桩 大模型应用 xcode SEO chfs ubuntu 16.04 ros 深度求索 私域 知识库 显示管理器 lightdm gdm SSH 密钥生成 SSH 公钥 私钥 生成 jina 匿名管道 MySql 火绒安全 frp seatunnel Nuxt.js 内网服务器 内网代理 内网通信 aarch64 编译安装 HPC idm 序列化反序列化 composer 知识图谱 树莓派 VNC 游戏引擎 seleium uniapp Linux的基础指令 邮件APP 免费软件 域名服务 DHCP 符号链接 配置 备选 网站 调用 示例 AD域 AutoDL Linux PID 本地部署AI大模型 LInux 业界资讯 模拟退火算法 链表 glibc epoll deepseek r1 自定义客户端 SAS make命令 makefile文件 软负载 技术共享 HiCar CarLife+ CarPlay QT RK3588 华为机试 iphone 大大通 第三代半导体 碳化硅 回显服务器 UDP的API使用 做raid 装系统 rnn armbian u-boot 镜像 fast HarmonyOS ftp 升级 CVE-2024-7347 VM搭建win2012 win2012应急响应靶机搭建 攻击者获取服务器权限 上传wakaung病毒 应急响应并溯源 挖矿病毒处置 应急响应综合性靶场 文件系统 路径解析 h.264 ShenTong LLM Web APP Streamlit easyui 运维监控 big data opensearch helm MI300x sublime text Attention web3 目标跟踪 OpenVINO 推理应用 tcp Dell HPE 联想 浪潮 vscode1.86 1.86版本 ssh远程连接 open Euler dde 单一职责原则 RAG 检索增强生成 文档解析 大模型垂直应用 open webui IMM 代理 rclone AList webdav fnOS asp.net大文件上传下载 VSCode OpenManus 移动云 宝塔 spark HistoryServer Spark YARN jobhistory bcompare Beyond Compare cd 目录切换 模拟器 教程 历史版本 下载 cursor AI-native Docker Desktop etl UOS1070e 指令 x64 SIGSEGV SSE xmm0 zookeeper 策略模式 nfs 服务器部署ai模型 miniapp 真机调试 调试 debug 断点 网络API请求调试方法 SSL 域名 Anolis nginx安装 linux插件下载 EMUI 回退 降级 gnu Windows ai工具 v10 软件 ldap xpath定位元素 ArkTs ArkUI 小智AI服务端 xiaozhi TTS curl wget 办公自动化 自动化生成 pdf教程 GIS 遥感 WebGIS AD 域管理 网站搭建 serv00 设置代理 实用教程 apt URL Ubuntu DeepSeek DeepSeek Ubuntu DeepSeek 本地部署 DeepSeek 知识库 DeepSeek 私有化知识库 本地部署 DeepSeek DeepSeek 私有化部署 多个客户端访问 IO多路复用 TCP相关API c/c++ 串口 自动化任务管理 用户缓冲区 网卡的名称修改 eth0 ens33 大文件分片上传断点续传及进度条 如何批量上传超大文件并显示进度 axios大文件切片上传详细教 node服务器合并切片 vue3大文件上传报错提示错误 大文件秒传跨域报错cors 网工 WebUI DeepSeek V3 nlp SSH 服务 SSH Server OpenSSH Server 上传视频至服务器代码 vue3批量上传多个视频并预览 如何实现将本地视频上传到网页 element plu视频上传 ant design vue vue3本地上传视频及预览移除 cocoapods 元服务 应用上架 防火墙 NAT转发 NAT Server Unity Dedicated Server Host Client 无头主机 opengl su sudo midjourney 代码托管服务 css3 sentinel kernel 区块链 deekseek 佛山戴尔服务器维修 佛山三水服务器维修 存储维护 NetApp存储 EMC存储 双系统 TrueLicense perl 超融合 Python基础 Python教程 Python技巧 axure 富文本编辑器 WLAN 加解密 Yakit yaklang 影刀 #影刀RPA# 干货分享 黑客工具 密码爆破 信号 Mermaid 可视化图表 tailscale derp derper 中转 线性代数 电商平台 服务器时间 C++软件实战问题排查经验分享 0xfeeefeee 0xcdcdcdcd 动态库加载失败 程序启动失败 程序运行权限 标准用户权限与管理员权限 像素流送api 像素流送UE4 像素流送卡顿 像素流送并发支持 实习 figma WebVM 基础环境 语音识别 流水线 脚本式流水线 ubuntu20.04 开机黑屏 嵌入式系统开发 代理服务器 perf linux内核 Zoertier 内网组网 沙盒 安卓模拟器 安防软件 CDN 虚幻引擎 virtualbox iventoy VmWare OpenEuler 热榜 本地环回 bind conda配置 conda镜像源 7z Typore 大模型部署 浏览器开发 AI浏览器 Spring Security 强化学习 rtsp服务器 rtsp server android rtsp服务 安卓rtsp服务器 移动端rtsp服务 大牛直播SDK 服务网格 istio rancher 我的世界服务器搭建 烟花代码 烟花 元旦 本地知识库部署 DeepSeek R1 模型 lsb_release /etc/issue /proc/version uname -r 查看ubuntu版本 ArtTS 环境配置 网络建设与运维 网络搭建 神州数码 神州数码云平台 云平台 游戏开发 磁盘清理 带外管理 powerpoint 大模型推理 OpenHarmony 鸿蒙开发 移动开发 Linux环境 语法 多路转接 firewall db cfssl TCP协议 抗锯齿 nftables 捆绑 链接 谷歌浏览器 youtube google gmail word xss GRUB引导 Linux技巧 分布式训练 Logstash 日志采集 软件构建 搭建个人相关服务器 大模型技术 本地部署大模型 项目部署 hosts 智能电视 regedit 开机启动 SVN Server tortoise svn MVS 海康威视相机 lb 协议 HAProxy dock 加速 webgl onlyoffice 在线office 根服务器 clickhouse 计算生物学 生物信息 基因组 laravel junit IDEA OpenSSH 玩机技巧 软件分享 软件图标 上传视频文件到服务器 uniApp本地上传视频并预览 uniapp移动端h5网页 uniapp微信小程序上传视频 uniapp app端视频上传 uniapp uview组件库 主从复制 lua HarmonyOS NEXT 原生鸿蒙 需求分析 规格说明书 IPv4 子网掩码 公网IP 私有IP Ubuntu共享文件夹 共享目录 Linux共享文件夹 音乐库 飞牛 iperf3 带宽测试 K8S k8s管理系统 移动魔百盒 USB转串口 harmonyOS面试题 autodl 查询数据库服务IP地址 SQL Server 虚拟现实 DIFY EtherNet/IP串口网关 EIP转RS485 EIP转Modbus EtherNet/IP网关协议 EIP转RS485网关 EIP串口服务器 react native wpf Qwen2.5-VL vllm yolov5 ubuntu24.04.1 自学笔记 小米 澎湃OS Android flink IO模型 maxkb ARG 读写锁 AI Agent 字节智能运维 java-rocketmq eclipse 端口 查看 ss 项目部署到linux服务器 项目部署过程 g++ g++13 k8s二次开发 集群管理 llama.cpp IMX317 MIPI H265 VCU win服务器架设 windows server sysctl.conf vm.nr_hugepages 状态模式 Headless Linux DeepSeek r1 AzureDataStudio vpn VS Code 僵尸世界大战 游戏服务器搭建 NLP模型 WSL2 上安装 Ubuntu 李心怡 Doris搭建 docker搭建Doris Doris搭建过程 linux搭建Doris Doris搭建详细步骤 Doris部署 bat 嵌入式Linux IPC docker部署翻译组件 docker部署deepl docker搭建deepl java对接deepl 翻译组件使用 中兴光猫 换光猫 网络桥接 自己换光猫 Mac内存不够用怎么办 架构与原理 banner 离线部署dify 多端开发 智慧分发 应用生态 鸿蒙OS docker部署Python 进程优先级 调度队列 进程切换 内网环境 minecraft fonts-noto-cjk 企业网络规划 华为eNSP triton 模型分析 软链接 硬链接 cpp-httplib 支付 微信支付 开放平台 PX4 GameFramework HybridCLR Unity编辑器扩展 自动化工具 毕昇JDK windows 服务器安装 CosyVoice 华为证书 HarmonyOS认证 华为证书考试 Web应用服务器 MAVROS 四旋翼无人机 fork wait waitpid exit ABAP kotlin 工具 shell脚本免交互 expect linux免交互 Carla 智能驾驶 python2 ubuntu24.04 burp suite 抓包 UDP vnc 风扇控制软件 内核 Helm k8s集群 yum换源 zip unzip 极限编程 samba 流量运营 ebpf uprobe 安装MySQL 通信工程 毕业 网络爬虫 多产物 Linux 维护模式 Reactor反应堆 mcp服务器 client close 网络文件系统 电视剧收视率分析与可视化平台 scapy java-rabbitmq Unity插件 问题解决 nvm whistle Sealos 论文阅读 浏览器自动化 scikit-learn proxy模式 visual studio 性能调优 安全代理 查看显卡进程 fuser ROS2 copilot 合成模型 扩散模型 图像生成 网页服务器 web服务器 Nginx export import save load 迁移镜像 vu大文件秒传跨域报错cors ip协议 Mac软件 输入系统 宝塔面板无法访问 top Linux top top命令详解 top命令重点 top常用参数 mm-wiki搭建 linux搭建mm-wiki mm-wiki搭建与使用 mm-wiki使用 mm-wiki详解 机柜 1U 2U milvus ubuntu 18.04 React Next.js 开源框架 云耀服务器 Alexnet Apache Beam 批流统一 案例展示 数据分区 容错机制 联机 僵尸毁灭工程 游戏联机 开服 容器技术 欧标 OCPP ros1 Noetic 20.04 apt 安装 docker搭建pg docker搭建pgsql pg授权 postgresql使用 postgresql搭建 fstab powerbi cron crontab日志 达梦 DM8 IO 开源软件 话题通信 服务通信 对比 meld DiffMerge 服务器安全 网络安全策略 防御服务器攻击 安全威胁和解决方案 程序员博客保护 数据保护 安全最佳实践 端口聚合 windows11 System V共享内存 进程通信 docker desktop image oracle fusion oracle中间件 notepad 硅基流动 ChatBox 粘包问题 wsgiref Web 服务器网关接口 图片增强 增强数据 隐藏文件 隐藏目录 管理器 通配符 ardunio BLE WebServer tar deployment daemonset statefulset cronjob navicat mysql安装报错 windows拒绝安装 AI员工 智慧农业 开源鸿蒙 团队开发 rpa 跨平台 国产数据库 瀚高数据库 数据迁移 下载安装 服务器扩容没有扩容成功 Linux find grep 钉钉 Linux权限 权限命令 特殊权限 CPU 使用率 系统监控工具 linux 命令 视频平台 录像 视频转发 视频流 软件卸载 系统清理 抓包工具 授时服务 北斗授时 MAC SecureCRT UEFI Legacy MBR GPT U盘安装操作系统 iNode Macos hexo 服务器部署 本地拉取打包 MacOS nosql MDK 嵌入式开发工具 论文笔记 ELF加载 lvm 磁盘挂载 磁盘分区 浪潮信息 AI服务器 cmake Web服务器 多线程下载工具 PYTHON ranger MySQL8.0 弹性服务器 DevOps 软件交付 数据驱动 WINCC MobaXterm 文件传输 大屏端 服务器ssl异常解决 csrutil mac恢复模式进入方法 恢复模式 Chatbox stable diffusion 零售 西门子PLC 通讯 代码规范 js 蓝牙 macOS zerotier netlink libnl3 NFC 近场通讯 智能门锁 ubuntu安装 linux入门小白 录音麦克风权限判断检测 录音功能 录音文件mp3播放 小程序实现录音及播放功能 RecorderManager 解决录音报错播放没声音问题 搜狗输入法 中文输入法 服务器正确解析请求体 数字证书 签署证书 工具分享 生活 镜像下载 显示器 Docker快速入门 解决方案 VMware Tools vmware tools安装 vmwaretools安装步骤 vmwaretools安装失败 vmware tool安装步骤 vm tools安装步骤 vm tools安装后不能拖 vmware tools安装步骤 qt5 客户端开发 接口优化 lighttpd安装 Ubuntu配置 Windows安装 服务器优化