Webpack跨域代理原理与三种实战方案
1. 项目概述为什么webpack开发服务器会遇到跨域问题“webpack跨域问题解决webpack跨域的三种方式”——这个标题背后藏着大量前端开发者在本地调试阶段反复踩坑的真实场景。我带过不少刚转前端的新人几乎所有人第一次用webpack-dev-server启动项目、调用后端接口时都会被浏览器控制台里那条醒目的CORS error报错卡住“No Access-Control-Allow-Origin header is present on the requested resource”。他们第一反应是“后端没配CORS”但很快发现后端明明加了Access-Control-Allow-Origin: *本地fetch(/api/user)还是报错换用axios也一样甚至把接口地址写成完整http://localhost:3000/api/user照样 404 或预检失败。这时候才意识到问题根本不在后端而在于webpack-dev-server 的代理机制没生效或者压根没配置。这个问题的本质是开发环境与生产环境的请求路径逻辑错位导致的。webpack 本身不处理网络请求它只是打包工具但它的开发服务器webpack-dev-server内置了一个基于express的轻量 HTTP 服务用于热更新和静态资源托管。当你在代码里写fetch(/api/list)浏览器实际发出的请求目标是http://localhost:8080/api/list即 dev-server 地址而真实后端可能跑在http://localhost:3001或https://api.example.com。由于协议、域名、端口任一不同即构成跨域浏览器直接拦截连请求都发不到后端——这跟后端是否开启 CORS 完全无关。换句话说跨域报错90%以上的情况是前端开发服务器没做好请求中转而不是后端没开权限。所以“解决 webpack 跨域”这件事核心不是改后端而是让webpack-dev-server扮演一个“中间人”角色把前端发给/api/xxx的请求悄悄转发到真实后端地址再把响应原样返回给前端。整个过程对浏览器透明它只看到localhost:8080完全感知不到后端在哪。这种代理模式就是业内常说的devServer proxy。它不改变生产环境行为上线后由 Nginx 或 CDN 统一处理只解决开发阶段的联调痛点。这也是为什么所有主流方案都围绕devServer.proxy展开——因为这是 webpack 官方唯一推荐、最轻量、最可控的开发期跨域解法。接下来我会从原理到实操把三种主流方式掰开揉碎讲清楚包括它们各自的适用边界、参数陷阱、以及我踩过的那些“看似配置对了却死活不转发”的坑。2. 方案选型逻辑与底层原理拆解2.1 为什么只有三种方式被广泛采用——不是选择多而是约束强很多人以为“解决 webpack 跨域”有十几种方法比如改 host、装插件、甚至用 Charles 抓包重写。但真正稳定、可维护、符合工程规范的其实就三种pathRewrite 代理、changeOrigin secure 配合、以及 bypass 函数定制。这不是人为限定而是由 webpack-dev-server 的底层架构决定的。webpack-dev-server的代理功能基于http-proxy-middleware库v4 版本已内置。这个库本身支持十几种配置项但 webpack 封装时做了严格裁剪只暴露context匹配路径、target目标地址、changeOrigin修改 origin 头、secure校验 HTTPS 证书、pathRewrite路径重写、bypass绕过代理等核心字段。其他如onProxyReq、onProxyRes等高级钩子webpack 并未透出——你无法在devServer.proxy里直接写onProxyReq: (proxyReq) {...}。这就天然排除了“在代理层动态改请求头”这类操作。所以所谓“三种方式”本质是http-proxy-middleware在 webpack 约束下能安全、稳定落地的三种组合模式。更关键的是这三种方式对应着三类典型联调场景纯 REST API 调试如调用 Spring Boot 的/api/user→ 用pathRewrite最简洁对接 HTTPS 测试环境或内网网关如https://test-gateway.company.local→ 必须启用changeOrigin和secure: false需要鉴权透传、Header 动态注入、或部分路径走代理、部分走 mock→ 唯一选择是bypass函数。我见过太多团队强行用pathRewrite处理 HTTPS 网关结果卡在ERR_SSL_PROTOCOL_ERROR也见过用bypass写了一堆 if-else 判断最后发现changeOrigin一行就能解决。所以选型的第一原则是先看后端部署形态再定代理策略而不是凭感觉选“看起来高级”的那个。2.2 pathRewrite最常用却最容易配错的“路径重写”pathRewrite的作用是把前端请求的路径在转发给后端前做字符串替换。比如你前端代码里写fetch(/api/v1/users)但后端真实接口是https://backend.com/users没有/api/v1前缀这时就需要把/api/v1去掉。配置长这样devServer: { proxy: { /api/v1: { target: https://backend.com, pathRewrite: { ^/api/v1: } } } }表面看很简单但这里有两个致命细节常被忽略第一正则表达式必须用字符串字面量不能用 RegExp 对象。^/api/v1是字符串webpack 会自动转成new RegExp(^/api/v1)但如果你写成pathRewrite: { /^\/api\/v1/: }RegExp 对象webpack 会直接忽略该规则代理失效。原因在于http-proxy-middleware内部对pathRewrite的 key 做了typeof string判断非字符串一律跳过。我曾经为这事 debug 了两小时最后发现文档里白纸黑字写着 “Only string keys are supported”。第二pathRewrite的替换发生在target拼接之后且仅作用于路径部分不触碰 query 参数。比如请求http://localhost:8080/api/v1/users?id123经过pathRewrite后实际转发的是https://backend.com/users?id123。但如果你的target写成https://backend.com/api/v1带路径再配合pathRewrite: { ^/api/v1: }结果会变成https://backend.com/users?id123—— 看似正确实则埋雷当后端接口路径本身含/api/v1比如https://backend.com/api/v1/internal/userspathRewrite会错误地把内部路径也删掉导致 404。所以最佳实践是target只写协议域名端口路径全部交给pathRewrite控制。提示pathRewrite的 value 支持函数形式可用于动态逻辑。例如后端有灰度环境需根据请求 Header 注入X-Env: staging可写pathRewrite: (path, req) { if (req.headers[x-env] staging) { return path.replace(/^\/api/, /api-staging); } return path; }但注意函数内不能异步不能 await否则代理会超时。2.3 changeOrigin secureHTTPS 网关和内网穿透的“保命组合”当你的测试后端是 HTTPS 协议如https://test-api.company.internal或者走公司统一网关如https://gateway.corp.compathRewrite单独使用会失败。典型现象是控制台报net::ERR_CONNECTION_REFUSED或ERR_SSL_PROTOCOL_ERRORcurl -v查看发现连接直接被拒绝。根本原因是http-proxy-middleware默认以“客户端身份”发起请求。当浏览器向http://localhost:8080/api/login发起请求webpack-dev-server 接收到后会以自己的 Node.js 进程作为客户端向https://gateway.corp.com/api/login发起新连接。此时Node.js 的https模块会严格校验目标服务器的 SSL 证书。而企业内网网关的证书往往是自签名或私有 CA 签发的Node.js 默认不信任直接中断连接。解决方案就是changeOrigin和secure的组合changeOrigin: true告诉代理把请求头中的Host改成target的域名如gateway.corp.com让后端网关能正确路由secure: false关闭 Node.js 对 HTTPS 证书的校验允许连接自签名证书。配置如下devServer: { proxy: { /api: { target: https://gateway.corp.com, changeOrigin: true, secure: false // 关键不加这行HTTPS 网关必挂 } } }这里有个极易混淆的点secure: false只影响代理进程自身的 HTTPS 连接校验不影响浏览器到 webpack-dev-server 的连接。也就是说你本地http://localhost:8080依然是 HTTP完全安全只是 webpack-dev-server 去连后端时放宽了证书要求。这和浏览器的--unsafely-treat-insecure-origin-as-secure参数完全不同层级。注意secure: false仅用于开发环境生产环境绝对禁止。如果后端是公有云 HTTPS如阿里云 SLB证书由 Lets Encrypt 签发则secure必须为true默认值否则会因证书链不完整报错。判断标准很简单用浏览器访问https://your-backend.com地址栏有没有绿色锁图标。有锁secure: true没锁显示“不安全”secure: false。2.4 bypass当代理需要“思考”时的终极武器bypass是一个函数它在每次请求到达代理层时执行返回false表示“不走代理直接由 webpack-dev-server 处理如返回 index.html”返回字符串则表示“转发到该 URL”返回null/undefined表示“走默认代理逻辑”。它的价值在于把静态规则升级为动态决策。比如后端未启动时自动 fallback 到本地 mock 数据某些接口需携带特殊 Header如X-Debug: true才能调通/api/admin走 A 网关/api/user走 B 网关根据 cookie 中的用户角色路由到不同环境。一个真实案例某项目需对接三个后端环境dev/test/prod但开发时只启用了 dev 环境。我们用bypass实现“有后端则代理无后端则 mock”devServer: { proxy: { /api: { target: http://localhost:3001, bypass: (req, res, proxyOptions) { // 检查后端是否存活简单 ping if (!isBackendAlive()) { // 返回 mock 数据 res.statusCode 200; res.setHeader(Content-Type, application/json); res.end(JSON.stringify({ code: 0, data: mockData[req.url] })); return true; // 阻止后续代理 } // 后端存活继续走默认代理 return undefined; } } } }bypass函数的三个参数中req是原始 HTTP 请求对象含 headers、url、methodres是响应对象可直接 writeproxyOptions是当前 proxy 配置。注意bypass内部不能await异步操作如数据库查询因为http-proxy-middleware是同步调用的。若需异步必须用res.write()res.end()手动控制流或改用onProxyReq钩子需脱离 webpack 封装自行集成http-proxy-middleware。3. 实操全流程与关键参数详解3.1 环境准备与基础验证确保代理层真正启动很多人的“代理不生效”根源在于没确认 webpack-dev-server 是否真的加载了 proxy 配置。以下步骤必须逐条验证第一步检查 webpack 配置文件位置现代项目多用webpack.config.js或vue.config.jsVue CLI、next.config.jsNext.js。注意vue.config.js中 proxy 配置在devServer.proxy而next.config.js不支持 devServer proxyNext.js 自带 API Routes应走pages/api目录。确认你编辑的是正确的文件。第二步启动时观察控制台日志运行npm run serve或npx webpack serve后控制台应出现类似提示Project is running at http://localhost:8080/ webpack output is served from / 404s will fallback to /index.html [HPM] Proxy created: /api - https://backend.com其中[HPM]是http-proxy-middleware的日志前缀。如果没有这行说明 proxy 配置未被识别——常见原因是proxy写在了module.exports的错误层级如写在module.exports.module.rules里而非devServer.proxy。第三步手动 curl 验证代理连通性不要依赖浏览器用命令行直击代理层# 模拟浏览器请求看是否被代理捕获 curl -v http://localhost:8080/api/test # 如果返回 404说明 proxy 未匹配到路径 # 如果返回 Connection refused说明 target 地址不可达 # 如果返回后端真实响应说明代理已通实操心得我习惯在bypass函数开头加一行console.log(Proxy triggered for:, req.url)启动后刷一下页面看控制台是否打印。没打印一定是路径匹配失败打印了但没转发再查target地址。3.2 pathRewrite 方案从零开始配置一个可用代理假设你的项目结构如下前端代码中所有 API 调用均以/api/v2开头后端服务地址为http://192.168.1.100:8081后端接口真实路径为/v2/users即去掉了/api。Step 1编写基础 proxy 配置在webpack.config.js的devServer下添加devServer: { port: 8080, proxy: { /api/v2: { target: http://192.168.1.100:8081, changeOrigin: true, // 即使是 HTTP 也建议开启避免 Host 头问题 pathRewrite: { ^/api/v2: // 正则字符串必须用单引号或双引号 } } } }Step 2理解路径匹配逻辑/api/v2是 context它匹配的是请求 URL 的pathname 部分且默认是“前缀匹配”。即/api/v2/users→ 匹配 ✅/api/v2/users/123→ 匹配 ✅/api/v2→ 匹配 ✅注意末尾不加/也能匹配/api/v21→ 不匹配 ❌/v21不是以/v2开头如果需要精确匹配/api/v2不匹配/api/v2/users需加^$正则/api/v2$: { /* ... */ } // 只匹配 /api/v2Step 3验证并调试启动服务后打开浏览器开发者工具 → Network 标签页发起一个fetch(/api/v2/users)请求。观察Request URL 显示http://localhost:8080/api/v2/users前端视角Response Headers 中应有x-powered-by: Express或后端标识证明已转发如果 Response 是 404检查后端是否真有/v2/users接口如果 Response 是 500检查后端日志确认请求已到达。常见问题pathRewrite不生效。原因通常是target地址末尾多了/。比如target: http://192.168.1.100:8081/带斜杠则转发后变成http://192.168.1.100:8081//v2/users双斜杠后端 nginx 会 400。务必保证target末尾无/。3.3 changeOrigin secure 方案对接 HTTPS 测试网关场景公司测试环境网关地址为https://test-gw.company.net需代理/api下所有请求。Step 1确认证书状态在浏览器访问https://test-gw.company.net/api/ping如果地址栏显示“不安全”或红色警告说明是自签名证书secure必须设为false。Step 2配置 proxydevServer: { proxy: { /api: { target: https://test-gw.company.net, changeOrigin: true, secure: false, // 关键 logLevel: debug // 开启 debug 日志便于排查 } } }Step 3理解 changeOrigin 的作用机制changeOrigin: true会修改两个关键请求头Host: 从localhost:8080改为test-gw.company.netOrigin: 从http://localhost:8080改为https://test-gw.company.net注意协议变为 https。这对网关至关重要。很多企业网关如 Kong、Apigee会校验Origin头是否匹配白名单若仍是http://localhost:8080会直接拒绝请求并返回 403。Step 4抓包验证用 Wireshark 或 Charles 抓取webpack-dev-server进程的出站流量目标端口 443确认TCP 连接成功建立TLS 握手完成即使证书不信任Node.js 也会继续HTTP 请求的Host头确实是test-gw.company.net。实操心得logLevel: debug会在控制台输出每条代理请求的详细信息包括匹配的 context、重写后的路径、转发的目标 URL。这是定位“为什么没转发”的第一手资料。我把它设为默认配置。3.4 bypass 方案实现动态路由与 mock fallback场景开发时后端经常宕机需自动 fallback 到本地 JSON 文件同时/api/admin接口需额外添加X-Admin-TokenHeader。Step 1准备 mock 数据文件在项目根目录建mock/文件夹放入users.json{ code: 0, data: [ { id: 1, name: 张三 }, { id: 2, name: 李四 } ] }Step 2编写 bypass 函数const fs require(fs); const path require(path); devServer: { proxy: { /api: { target: https://prod-api.company.com, changeOrigin: true, secure: true, bypass: (req, res, proxyOptions) { // 1. 检查是否为 admin 接口添加 Header if (req.url.startsWith(/api/admin)) { req.headers[X-Admin-Token] dev-admin-token; } // 2. 尝试连接后端超时 2s const controller new AbortController(); const timeoutId setTimeout(() controller.abort(), 2000); fetch(https://prod-api.company.com/health, { method: GET, signal: controller.signal }) .then(() { clearTimeout(timeoutId); // 后端健康走默认代理 return undefined; }) .catch(() { clearTimeout(timeoutId); // 后端不健康返回 mock try { const mockPath path.join(__dirname, mock, req.url.split(?)[0].replace(/api, ) .json); const data fs.readFileSync(mockPath, utf8); res.statusCode 200; res.setHeader(Content-Type, application/json); res.end(data); } catch (e) { res.statusCode 404; res.end(JSON.stringify({ code: 404, msg: Mock not found })); } return true; }); } } } }Step 3关键限制说明上述代码在 webpack v5 中会报错因为bypass是同步函数不能await fetch。正确写法是用回调风格bypass: (req, res, proxyOptions) { // ... admin header logic ... // 用 http 模块发同步请求不推荐阻塞主线程 // 更佳方案用 child_process.spawn 启动一个独立进程检测或改用 webpack 插件 // 实际项目中我直接用一个全局变量标记后端状态由另一个定时任务维护 }实操心得bypass不是万能的。它适合简单逻辑如读文件、查内存缓存。复杂业务逻辑如数据库查询、JWT 解析应剥离到独立服务前端通过/api/mock/xxx调用。bypass的定位是“胶水层”不是“业务层”。4. 常见问题与排查技巧实录4.1 代理不生效的 7 种典型场景及速查表现象可能原因排查命令/操作解决方案控制台无[HPM] Proxy created日志proxy配置位置错误检查webpack.config.js中proxy是否在devServer对象下移动到devServer.proxycurl http://localhost:8080/api/test返回 404context 路径不匹配curl -v http://localhost:8080/api/test看是否触发bypass日志检查 context 正则尝试/api替代/api/请求转发到target但返回 404target地址末尾有/curl -v http://localhost:8080/api/test看转发 URL 是否多出//删除target末尾/HTTPS 网关报ERR_SSL_PROTOCOL_ERRORsecure未设为falsenode -e require(https).get(https://test-gw.company.net, console.log)加secure: false后端收不到Cookie或Authorization头cookieDomainRewrite未配置curl -v -H Cookie: sessionabc http://localhost:8080/api/test加cookieDomainRewrite: pathRewrite后路径仍带/apipathRewritekey 写成 RegExpconsole.log(typeof Object.keys(proxyOptions.pathRewrite)[0])确保 key 是字符串如^/api代理生效但响应为空白bypass函数中未调用res.end()在bypass中加console.log(end called)确保每个分支都有res.end()提示cookieDomainRewrite是个隐藏高手。当后端设置Set-Cookie: userabc; Domain.company.com浏览器会拒绝接收因当前域是localhost。加cookieDomainRewrite: 后代理会把Domain.company.com改成DomainlocalhostCookie 就能正常写入。4.2 路径匹配的“幽灵 bug”斜杠引发的血案最让我头疼的跨域问题往往源于一个不起眼的/。比如proxy: { /api/: { // 注意这里末尾有 / target: http://backend.com } }这个配置会导致/api/users不匹配因为/api/只匹配以/api/开头的路径而/api/users的 pathname 是/api/users它确实以/api/开头——等等为什么说不匹配真相是webpack-dev-server 的路径匹配基于http-proxy-middleware的contextMatch函数它对/api/的处理是精确前缀匹配且要求路径必须以/结尾或下一个字符是/。/api/users的第 6 个字符是u不是/所以不匹配。而/api/本身会匹配/api/但不会匹配/api无结尾/。解决方案只有两个统一去掉 context 末尾//api能匹配/api、/api/、/api/users统一加上/**通配/api/**明确表示匹配所有子路径。我现在的标准写法是/api/**。它语义清晰无歧义且兼容所有版本。4.3 生产环境陷阱proxy 配置为何上线后消失很多新人把devServer.proxy当成“通用跨域方案”上线后发现接口全 404。这是因为devServer仅在webpack serve时生效webpack build生成的静态文件中不包含任何代理逻辑。生产环境必须由 Nginx、CDN 或后端网关处理跨域。正确做法是在package.json中区分环境变量。scripts: { serve: webpack serve --mode development, build: cross-env NODE_ENVproduction webpack build }然后在代码中// api.js const BASE_URL process.env.NODE_ENV development ? /api // 开发时走 webpack 代理 : https://prod-api.company.com; // 生产时走真实域名实操心得永远不要在生产构建中保留devServer配置。我见过团队把devServer.proxy误提交到 CI/CD 脚本导致构建失败。Webpack 5 已支持--config指定不同配置文件建议拆分为webpack.dev.js和webpack.prod.js。4.4 性能与安全边界代理层能做什么不能做什么代理层http-proxy-middleware的能力是有明确边界的✅ 能做路径重写、Header 修改onProxyReq、响应重写onProxyRes、超时控制、重试机制❌ 不能做修改请求体request body、解析 JSON 并改字段、执行数据库查询、调用外部 API除非自己写 fetch⚠️ 谨慎做onProxyReq中的proxyReq.write()会破坏流式传输大文件上传可能失败。一个经典误区想在代理层“统一添加 JWT Token”。有人写onProxyReq: (proxyReq, req, res) { proxyReq.setHeader(Authorization, Bearer ${getToken()}); }这看似合理但getToken()若是异步的如读 localStorage就会出错。正确做法是Token 应由前端在fetch时注入代理层只负责透传。最后分享一个小技巧用proxy的logProvider自定义日志把所有代理请求记录到文件方便联调审计logProvider: () { return { log: (...args) { fs.appendFileSync(./proxy.log, ${new Date().toISOString()} ${args.join( )}\n); } }; }我在实际项目中发现90% 的跨域问题根源不在技术方案而在对devServer.proxy的认知偏差——把它当成“万能胶”而忽略了它只是开发期的临时桥梁。真正的解法是让前端请求路径与后端契约对齐代理只是帮我们暂时绕过浏览器的同源限制。当你不再纠结“怎么让 proxy 工作”而是思考“为什么我的请求路径要和后端不一致”问题就解决了一半。

相关新闻

机房建设方案详解:从供配电到动环监控

机房建设方案详解:从供配电到动环监控

前段时间我在跟进一个信息化机房建设项目,项目规模不算大,但涉及的专业系统一点都不少。很多第一次接触机房建设的人,第一反应是:机房不就是找间屋子、装几台空调、放几排机柜、扯上网线的事吗?真做起来才发现&#xf…

2026/10/13 7:28:03 阅读更多 →
SpringBoot+Vue3+MyBatis实战:医院病历管理系统全栈设计与踩坑总结

SpringBoot+Vue3+MyBatis实战:医院病历管理系统全栈设计与踩坑总结

做了几年的医疗信息化相关项目,SpringBootVue3MyBatis这套组合在医院病历管理系统里算是很成熟的路子了。这次把整个项目的设计思路、表结构、前后端实现细节和踩过的坑完整梳理一遍,给正在做类似系统或者准备拿这类项目练手的朋友做个参考。这套系统解决…

2026/10/13 7:28:03 阅读更多 →
WebStorm前端工程化实战:从页面开发到交付的标准化工作流

WebStorm前端工程化实战:从页面开发到交付的标准化工作流

1. 项目概述&#xff1a;这不是“装个IDE就完事”的前端开发&#xff0c;而是用WebStorm把页面从草图变成可交付产品的完整链路你打开WebStorm&#xff0c;新建一个HTML文件&#xff0c;敲下<h1>Hello World</h1>&#xff0c;浏览器一刷——成了。但真正的前端页面…

2026/10/13 7:28:03 阅读更多 →

最新新闻

Schema标记实战:用结构化数据占据整个SERP

Schema标记实战:用结构化数据占据整个SERP

1. "占据整个SERP"到底是怎么回事&#xff1a;从一次搜索结果截图说起先别急着上代码&#xff0c;我们得先搞清楚一个问题&#xff1a;所谓"占据整个SERP"&#xff0c;到底长什么样&#xff1f;去年我接手了一个垂直电商的小项目&#xff0c;卖的是某种小众…

2026/10/13 8:16:34 阅读更多 →
AutoTool实操:Agent工具路由如何省下30%推理成本

AutoTool实操:Agent工具路由如何省下30%推理成本

AAAI 2026 放榜之后&#xff0c;我朋友圈里最热闹的话题除了 Jev 这种突然爆火的开源 Agent 项目&#xff0c;就是各路团队在吐槽“推理成本根本扛不住”。Jev 确实把复杂任务的拆解能力拉到了一个新高度&#xff0c;但问题也随之而来&#xff1a;工具越挂越多、调用链越拉越长…

2026/10/13 8:16:34 阅读更多 →
免费磁盘清理工具 Czkawka:找重复文件与清理空文件夹完整上手指南

免费磁盘清理工具 Czkawka:找重复文件与清理空文件夹完整上手指南

免费磁盘清理工具 Czkawka&#xff1a;找重复文件与清理空文件夹完整上手指南 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka Czkawka 是一款用 Ru…

2026/10/13 8:16:34 阅读更多 →
Faker库实战:让接口测试与自动化测试的造数更真实高效

Faker库实战:让接口测试与自动化测试的造数更真实高效

做接口测试和自动化测试的朋友&#xff0c;应该都体验过那种被“假数据”支配的尴尬。我早年在某项目组做下单流程的接口测试&#xff0c;为了凑测试用户&#xff0c;手工在配置文件里写了几百个“张三”&#xff0c;手机号清一色13800138000&#xff0c;地址全是“北京市朝阳区…

2026/10/13 8:16:34 阅读更多 →
带实习生三个月,我总结了一套 Mentor 带教方法:从前端页面切入到后端接口拆解(附完整清单)

带实习生三个月,我总结了一套 Mentor 带教方法:从前端页面切入到后端接口拆解(附完整清单)

文档教程知识库 【免费下载链接】InterviewGuide &#x1f525;&#x1f525;「InterviewGuide」是阿秀从校园->职场多年计算机自学过程的记录以及学弟学妹们计算机校招&秋招经验总结文章的汇总&#xff0c;包括但不限于C/C 、Golang、JavaScript、Vue、操作系统、数据结…

2026/10/13 8:16:34 阅读更多 →
CyFA:放弃预测残差,用循环特征对齐提升多变量时间序列异常检测

CyFA:放弃预测残差,用循环特征对齐提升多变量时间序列异常检测

多变量时间序列异常检测这块&#xff0c;我前前后后折腾了不少方案。最早用的也是"先预测、再算残差"的老路子&#xff0c;后来复现了 GDN 和 KDA 这两个基线&#xff0c;说实话越用越觉得别扭。直到我自己折腾出一个叫 CyFA 的思路&#xff0c;直接扔掉 Delta Rule&…

2026/10/13 8:15:34 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目&#xff0c;我最大的感受是&#xff0c;大部分坑不是出在技术前沿&#xff0c;而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节&#xff0c;最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了&#xff0c;很难不碰到舵机控制这道坎。做智能小车要转方向&#xff0c;做机械臂要抬关节&#xff0c;做云台要偏航俯仰&#xff0c;背后都是同一个东西在干活&#xff1a;舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”&#xff1f;——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台&#xff1f;或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜&#xff1f;又或者&#xff0c;在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →