用 Node.js 原生 API 写个本地代理,解决跨域烦恼
用 Node.js 原生 API 写个本地代理解决跨域烦恼前后端分离开发时最让人头疼的往往不是业务逻辑而是浏览器的同源策略。前端跑在localhost:3000后端在localhost:8080一旦前端发起 AJAX 请求控制台立马飘红CORS 报错拦路。很多同事为了省事直接在后台配置Access-Control-Allow-Origin: *。这在本地调试没问题但上线前如果忘了收回来生产环境就是个大漏洞。与其在两边反复横跳改配置不如在本地起个轻量级的代理网关。用 Node.js 原生http模块就能写零依赖还能顺便把请求头给洗了。为什么需要这个代理本地开发时前后端端口不同浏览器默认禁止跨域访问。如果不做处理前端请求会被拦截。如果为了图方便在后端直接放行所有跨域又会给生产环境埋下 XSS 隐患。更麻烦的是没有中间层你很难统一查看请求的转发耗时排查问题全靠猜。这个代理的作用很简单前端请求先发给它它再转给后端。浏览器以为是在跟同源服务器通信自然就放行了。代理是怎么工作的流程并不复杂核心就是“截获 - 重写 - 转发”。截获请求前端请求localhost:9000代理程序接收到。重写头部把Origin、Host等头部改成后端能识别的样子避免后端微服务因为校验 Origin 而拒绝请求。转发请求代理向后端localhost:8080发起真实的 HTTP 请求。注入响应头拿到后端返回的数据后手动加上Access-Control-Allow-Origin: *等跨域头。返回前端把处理好的数据流式写回给前端。如果后端 5 秒内没反应代理直接返回 504避免前端页面卡死。代码实现下面这个脚本完全基于 Node.js 原生http和url模块没有引入http-proxy-middleware这种第三方包。代码量不大但包含了超时控制、流式转发和基础的路由处理。// dev_proxy_gateway.js const http require(http); const url require(url); const TARGET_API_SERVER http://127.0.0.1:8080; // 后端真实地址 const PROXY_PORT 9000; // 代理监听端口 function logging(msg) { console.log(\x1b[36m[Proxy] ${msg}\x1b[0m); } const server http.createServer((req, res) { logging(${req.method} ${req.url}); // 1. 处理 OPTIONS 预检请求 if (req.method OPTIONS) { res.writeHead(204, { Access-Control-Allow-Origin: *, Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, Access-Control-Allow-Headers: Content-Type, Authorization, Access-Control-Max-Age: 86400 }); return res.end(); } // 2. 构造转发请求 const parsedTarget url.parse(TARGET_API_SERVER); const options { hostname: parsedTarget.hostname, port: parsedTarget.port, path: req.url, method: req.method, headers: { ...req.headers, host: ${parsedTarget.hostname}:${parsedTarget.port}, origin: TARGET_API_SERVER, referer: TARGET_API_SERVER }, timeout: 5000 // 5 秒超时 }; // 3. 发起代理请求 const proxyReq http.request(options, (proxyRes) { // 注入跨域头 res.setHeader(Access-Control-Allow-Origin, *); res.setHeader(Access-Control-Allow-Methods, GET, POST, PUT, DELETE, OPTIONS); res.setHeader(Access-Control-Allow-Headers, Content-Type, Authorization); res.writeHead(proxyRes.statusCode, proxyRes.headers); // 4. 流式透传数据 proxyRes.pipe(res); }); // 5. 错误与超时处理 proxyReq.on(error, (err) { logging(Error: ${err.message}, error); res.writeHead(504, { Content-Type: application/json }); res.end(JSON.stringify({ error: Gateway Timeout: Backend unreachable. })); }); proxyReq.on(timeout, () { proxyReq.destroy(); res.writeHead(504, { Content-Type: application/json }); res.end(JSON.stringify({ error: Gateway Timeout: Backend no response within 5s. })); }); // 把前端的数据管道写入代理请求 req.pipe(proxyReq); }); server.listen(PROXY_PORT, () { logging(Proxy running on http://127.0.0.1:${PROXY_PORT}); logging(Forwarding to: ${TARGET_API_SERVER}); });几个需要注意的地方这套方案虽然轻量但在实际使用中也有几个局限性得提前心里有数延迟问题请求多了一层转发理论上会增加几毫秒的延迟。但在本地环境下这点损耗通常 5ms相比解决跨域带来的便利完全可以忽略。HTTPS 支持如果前端项目强制 HTTPS代理网关也得配自签名证书。本地调试建议在浏览器里直接允许“不安全连接”没必要为了个开发工具去折腾复杂的证书链。长连接支持上面的代码只处理了普通的 HTTP 请求。如果项目里有 WebSocket 或 SSE服务端推送原生http模块不会自动升级协议。这时候需要显式监听upgrade事件手动把 TCP socket 桥接过去否则实时功能会失效。总结在本地起个 Node.js 代理是解决跨域最稳妥的办法。它比在后端直接放行安全比配 Nginx 轻量。代码不多维护成本低能帮你把精力从“为什么请求被拦截”这种琐事上解放出来专心写业务逻辑。

相关新闻

电子设计竞赛实战:从菜鸟到国奖的模块化备战策略

电子设计竞赛实战:从菜鸟到国奖的模块化备战策略

1. 项目背景与心路历程去年夏天,我第一次站在全国大学生电子设计竞赛的赛场上时,手里攥着的电路板还在冒烟。作为电子工程专业的大二学生,我连示波器的触发模式都调不明白,更别说在72小时内完成一个完整的电子系统了。队友们面面相…

2026/6/26 23:08:44阅读更多 →
半导体存储芯片暴跌,AI交易降温

半导体存储芯片暴跌,AI交易降温

昨晚看了一眼美股,还以为我软件出bug了。存储芯片这个赛道,直接带头表演了一个大跳水。闪迪,跌超10%。 美光,也是跌超10%。这可不是什么杂毛小票,这都是实打实的半导体硬核资产。如果你手里还拿着A股的存储芯片或者AI算…

2026/6/26 23:08:44阅读更多 →
顺义50年老中医祝肇刚,首都国医名师

顺义50年老中医祝肇刚,首都国医名师

北京中医药大学中医临床特聘专家,首都国医名师,顺义区首批名老中医药专家学术经验继承指导老师。北京杏园金方国医医院副院长,杏园金方首席专家团特聘专家,出身于名中医世家,祝谌予教授长子,施今墨先生外孙…

2026/6/26 23:08:44阅读更多 →
【紧急预警】IntelliJ IDEA 2024新版已悄然变更Spring Boot项目默认配置!3类高危兼容性风险正在爆发,立即自查这4个关键节点

【紧急预警】IntelliJ IDEA 2024新版已悄然变更Spring Boot项目默认配置!3类高危兼容性风险正在爆发,立即自查这4个关键节点

更多请点击: https://kaifayun.com 第一章:IntelliJ IDEA 2024新版Spring Boot项目创建机制重大变更概览 IntelliJ IDEA 2024.1 起彻底重构了 Spring Boot 项目初始化流程,弃用旧版基于 Spring Initializr Web API 的向导式表单,…

2026/6/27 0:39:09阅读更多 →
内存清理工具合集!大小不到1M的软件,让Windows瞬间丝滑!

内存清理工具合集!大小不到1M的软件,让Windows瞬间丝滑!

软件获取 电脑内存清理工具 今天给大家带来5款内存清理工具,足够大家用了!有需要的朋友可以看看!! 第一款:ReduceMemory ReduceMemory是一款内存清理工具,压缩以后大小仅992K,非常小。软件打…

2026/6/27 0:39:09阅读更多 →
CTF 入门必备基础:Git、JSON、HTTP 请求头、BP 抓包全知识点整理

CTF 入门必备基础:Git、JSON、HTTP 请求头、BP 抓包全知识点整理

一、前言 最近刚入门 CTF Web 方向,整理了一套高频基础考点,包含git reflog源码泄露、JSON 传参漏洞、GET/POST 表单提交、HTTP 请求头伪造、HTTP 状态码、Burp Suite 激活与抓包使用,覆盖新生赛 90% 基础题型,适合新手收藏学习。…

2026/6/27 0:39:09阅读更多 →
BetterNCM安装器:3分钟搞定网易云音乐插件系统安装

BetterNCM安装器:3分钟搞定网易云音乐插件系统安装

BetterNCM安装器:3分钟搞定网易云音乐插件系统安装 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer BetterNCM安装器是一款专为网易云音乐PC版设计的跨平台插件管理工具&…

2026/6/27 0:39:09阅读更多 →
数字经济和大数据管理与应用哪个好

数字经济和大数据管理与应用哪个好

如果你正在纠结数字经济和大数据管理与应用哪个好,别只看专业名字“高不高级”,更要看自己未来想坐在哪张办公桌前。2026 年的就业市场里,企业更缺的是能把数据、业务、技术连起来的人,而不是只会背概念的人。也正因为如此&#x…

2026/6/27 0:39:09阅读更多 →
【信息科学与工程学】【通信工程】第六十九篇 企业网络的数学分析04

【信息科学与工程学】【通信工程】第六十九篇 企业网络的数学分析04

园区网络安全架构(零信任、微分段) 园区网络自动化运维(AIOps、意图网络) 园区网络绿色节能(PoE++、智能休眠) 园区网络新技术(Wi-Fi 7 MLO、5G-A URLLC) 园区网络性能优化(TCP优化、QUIC) 编号 类型 领域 子领域 问题 问题的数学分析及数值分析及算法分析…

2026/6/27 0:34:08阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/26 11:03:22阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/26 4:15:25阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/26 9:29:01阅读更多 →
10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声&#xff1a;Retrieval-based-Voice-Conversion-WebUI完整指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrie…

2026/6/27 0:04:03阅读更多 →
Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider&#xff1a;3分钟AI智能分层&#xff0c;彻底告别手动抠图时代 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 还在为复杂的图像分层工作烦…

2026/6/27 0:04:03阅读更多 →
Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

1. 项目概述&#xff1a;为什么X-Frame-Options是Web安全的“防盗门”&#xff1f;最近在排查一个老项目的安全审计报告时&#xff0c;又被提到了“点击劫持”风险&#xff0c;矛头直指缺失的X-Frame-Options响应头。这已经不是第一次了&#xff0c;很多开发团队&#xff0c;尤…

2026/6/27 0:04:03阅读更多 →