ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

http-proxy-middleware 版本演进全解读:从 v0.0.5 到 v4.2.0 的变更日志深度分析

http-proxy-middleware 版本演进全解读:从 v0.0.5 到 v4.2.0 的变更日志深度分析 后端API网关【免费下载链接】http-proxy-middleware:zap: The one-liner node.js http-proxy (httpxy) middleware for connect, express, next.js and more项目地址https://gitcode.com/gh_mirrors/ht/http-proxy-middleware点击查看免费下载本篇基于仓库根目录的 CHANGELOG.md 完整梳理 http-proxy-middleware 从首次发布到当前 v4.2.0 的演进脉络并结合仓库源码src/、test/、package.json与 MIGRATION_V3.md 迁移指南逐版本还原关键特性、缺陷修复与破坏性变更背后的实现细节。读完本文你将掌握该中间件connect/express/next.js 通用反向代理能力的形成过程理解 v3/v4 大版本升级必须注意的迁移要点并能借助变更记录与源码位置快速定位每个功能能力的出处。一、当前版本速览v4.x 的三大主线当前仓库 package.json 声明版本为4.2.0依赖核心代理引擎httpxy^0.5.4要求 Node.js^22.15.0 || ^24.0.0 || 26.0.0且为 ESM-onlytype: module入口dist/index.js。v4.x 的演进可归纳为三条主线引擎换血http-proxy → httpxy、ESM 与 Node 版本策略收紧、对请求体与响应体处理能力的持续强化。1.1 v4.2.0类型导出与 POST 诊断消息feat(types): export OnProxyEvent type将代理事件回调类型OnProxyEvent从类型层公开导出源码位于 src/index.tsexport type { ... OnProxyEvent } from ./types.js其事件签名定义见 src/types.ts涵盖error、proxyReq、proxyReqWs、proxyRes、open、close、start、end、econnreset等全部 httpxy 事件。feat(debug-proxy-errors-plugin): diagnostic message for POST bodyParser ECONNRESET error在 debug-proxy-errors-plugin.ts 中新增了针对POST请求已携带req.body即 bodyParser 已消费请求流时发生ECONNRESET的专项诊断hasParsedBody()检测req.method POST body in req req.body命中时打印红色提示给出两条修复路径——把代理中间件放在 bodyParser 之前或使用fixRequestBody()辅助函数。chore(package.json): update to httpxy v0.5.4引擎依赖随之升级。1.2 v4.1.x请求体、响应体与路由的批量增强v4.1.1仅一条fix(fixRequestBody): harden form-data stringification——强化 multipart/form-data 的字符串化对应 stringify-form-data.ts。v4.1.0是 v4 阶段特性最密集的一个版本feat(definePlugin): helper function to create plugins新增definePlugin()辅助函数见 define-plugin.ts。它本质上是带完整类型推断的恒等包装since 4.1.0让插件作者能以(proxyServer, options)的签名获得类型提示proxyServer为 httpxy 的ProxyServer实例options为透传给createProxyMiddleware的配置。feat(router): add res and options to router function与feat(pathRewrite): add res and options to custom pathRewrite functionrouter与pathRewrite的自定义函数签名在 src/types.tsPathRewriteConfig和 src/types.tsrouter中体现注意文档注释特别说明在 WebSocket upgrade 流程中res为undefined。feat(zstd): support zstd compression in responseInterceptor and fixRequestBody压缩支持扩展到zstd。在 fix-request-body.ts 中writeBody根据Content-Encoding依次处理brbrotli、deflate、gzip、zstd均使用 Node 内置zlib同步压缩并重新计算Content-Length。fix(responseInterceptor): prevent trailer/content-length conflict、fix(response-interceptor): reduce responseInterceptor buffer churn、fix(responseInterceptor): handle bodyless responses (HEAD/1xx/204/304) with content-encoding三处均针对 response-interceptor.ts前者解决 trailer 与 content-length 冲突后者处理无响应体HEAD/1xx/204/304却带 content-encoding 的边界情况。fix(ipv6): preserve credentials when normalizing bracketed IPv6 target string与fix(ipv6): unspecified IPv6 target hostname (::)IPv6 目标地址规范化时保留凭据user:password并支持::未指定主机。fix(ws): handle multi-server upgrade subscription and safe proxy shutdownWebSocket 多服务器 upgrade 订阅与安全关闭。fix(router): harden proxy-table matching路由表匹配加固。chore(package.json): update to httpxy0.5.3。1.3 v4.0.0破坏性变更最集中的大版本v4.0.0 是 v3 之后又一次大规模换血CHANGELOG 明确列出的 [BREAKING CHANGE] 有变更影响refactor: replace http-proxy w/ httpxy底层代理引擎从http-proxy替换为 unjs 的httpxy全部默认插件与事件订阅均迁移到 httpxy 事件模型chore(package.json): esm only包仅提供 ESM 构建exports字段只指向dist/index.jsfeat: drop node v14/v16/v18chore(package.json): drop node20Node 最低要求提升最终由node ^22.15.0兜底chore: remove legacyCreateProxyMiddleware()v3 为兼容 v2 提供的适配器入口被正式移除迁移过渡期结束chore(package.json): bump to httpxy 0.5.0引擎依赖基线refactor: remove deprecated url.parse()移除 Node 已废弃的url.parse()调用改用新的 URL APIfeat(hono): support for hono with createHonoProxyMiddleware新增 Hono 专属入口见 factory-hono.ts值得展开的两点是1Hono 支持与子路径导出。v4.0.0 新增createHonoProxyMiddleware并在 package.json 中为http-proxy-middleware/hono子路径单独声明exports指向 index-hono.ts。index-hono.ts 的注释说明设计意图把 Hono 相关导出隔离在子路径避免根入口 import 可选的hono/hono/node-server依赖从而防止非 Hono 用户遭遇 TypeScript 模块解析错误。2IPv6 字面量支持。feat(ipv6): support literal IPv6 addresses in target and forward options (ie. http://[::1]:8000)配合fix(logger-plugin): support ipv6 host and handle undefined protocol/host使target、forward可携带[::1]形式字面量地址日志插件同时兼容 IPv6 主机与缺失 protocol/host 的场景。其余修复还包括fix(types): fix Logger typeLogger类型在 src/types.ts 定义为PickConsole, info | warn | errorfix(error-response-plugin): sanitize input错误响应文本经 sanitize.ts 消毒后输出fix(fixRequestBody): support content-encoding on request body请求体重压缩fix: prevent TypeError when ws enabled but server is undefinedfix: applyPathRewrite logs old req.url instead of rewritten path日志修正为记录重写后的路径以及ci: migrate from jest to vitest测试框架迁移当前 vitest.config.ts 与package.json中test: vitest run可印证。二、v3.x插件体系与迁移适配v3.0.0 被 CHANGELOG 标注为This release contains some breaking changes并指引阅读 MIGRATION_V3.md。仓库根目录还有一份更简短的 MIGRATION.md其中 v3 一节直接链接到MIGRATION_V3.md。2.1 v3.0.0 的核心重构feat(plugins): add support for pluginsrefactor(handlers): refactor to plugins [BREAKING CHANGE]v3 最重要的架构变化——把原先的handlersonError/onProxyReq 等事件处理器重构为插件plugin体系。默认插件集中注册于 src/plugins/default/index.ts包含debug-proxy-errors-plugin、error-response-plugin、logger-plugin、proxy-events四个模块。插件签名见 src/types.ts(proxyServer, options) void。feat(ejectPlugins): skip registering default plugins新增ejectPlugins选项默认false置为true可跳过默认插件注册代价是需要自行处理错误以防止服务器崩溃src/types.ts 注释中明确警告。refactor: logging [BREAKING CHANGE]日志体系重构logProvider/logLevel选项被移除改为logger选项直接注入外部日志对象见下文 §2.3。feat(option): refactor context to pathFilter option [BREAKING CHANGE]context位置参数改为pathFilter选项。feat: remove shorthand usage [BREAKING CHANGE]移除createProxyMiddleware(http://target)简写形式。fix: server mounting [BREAKING CHANGE]与refactor: use node http base types [BREAKING CHANGE]修复服务器挂载语义类型改用 Node 内置http基础类型。feat(legacyCreateProxyMiddleware): adapter with v2 behaviorshow migration tips为 v2 用户提供运行时打印迁移提示的适配器该适配器在 v4.0.0 中被移除。feat(debug): improve troubleshooting、feat(typescript): type improvements、chore(deps): update micromatch to 4.0.5等。2.2 迁移要点MIGRATION_V3.md 细节MIGRATION_V3.md 给出了 v2 → v3 的完整迁移对照摘要如下移除req.urlpatching代理挂载路径需写入target。app.use(/user, proxy({ target: http://www.example.org }))改为target: http://www.example.org/user。pathRewrite行为变化现在只重写挂载点之后的路径。原先用pathRewrite: { ^/user: /secret }重写 basePath 的写法改为直接target: http://www.example.org/secret在根路径挂载时行为与 v2 一致。移除 shorthandcreateProxyMiddleware(http://...)→createProxyMiddleware({ target: http://... })。context→pathFiltercreateProxyMiddleware(/path, {target})→createProxyMiddleware({ target, pathFilter: /path })详见 recipes/pathFilter.md。logProvider/logLevel→logger内部只使用info/warn/error三个级别以兼容不同日志库用法为createProxyMiddleware({ target, logger: console })详见 recipes/logger.md。代理事件重构onError/onProxyReq/onProxyRes/onProxyReqWs/onOpen/onClose平铺选项统一收拢到on命名空间{ on: { error, proxyReq, proxyRes, proxyReqWs, open, close } }详见 recipes/proxy-events.md。legacyCreateProxyMiddleware的 JS/TS 用法对照也保留在 MIGRATION_V3.md 中注意该适配器仅存在于 v3v4 已移除升级 v4 必须按上述 6 点改造。2.3 v3.0.1 ~ v3.0.5修复密集期v3.0.5fix(fixRequestBody): check readableLength——fix-request-body.ts 中req.readableLength ! 0时直接跳过bodyParser 失败场景。v3.0.4handle invalid request、prevent multiple .write() calls用 if-elseif 分支防止重复writeBody/setHeader触发Cannot set headers after they are sent错误见 fix-request-body.ts、support multipart/form-data、handle errors in handleUpgradeWebSocket、export Plugin type。v3.0.3fix(pathFilter): handle errors——路径过滤器异常处理。v3.0.2依赖is-plain-obj→is-plain-objectESLint 升级 v9logger-plugin 处理 undefined protocol/hostname。v3.0.1修复RequestHandler返回类型src/types.ts 中RequestHandler同时携带upgrade方法改善 pathFilter 错误信息修复缺失 target port 与router选项下 target port 日志消除循环依赖fix-request-body支持json后缀如application/merge-patchjson。三、v2.x 与 v1.x从可用到稳定3.1 v2.x小步快跑v2.0.0drop node 10 [BREAKING CHANGE]。v2.0.1修复fixRequestBody类型错误为fixRequestBody与responseInterceptor补齐测试覆盖。v2.0.2更新types/http-proxy修复空 JSON 对象请求体{}的代理问题。v2.0.3optional types/express peer dependency——把types/express变为可选 peer 依赖降低非 Express 用户的类型负担。v2.0.4改进fix-request-body的 content-type 检查。v2.0.5add default handler to econnreset——为ECONNRESET增加默认错误处理。v2.0.6fix(proxyReqWs): catch socket errors——WebSocket 代理请求的 socket 错误捕获对应 debug-proxy-errors-plugin.ts 中proxyReqWs事件上的socket.on(error)订阅。3.2 v1.x响应拦截器与健壮性打磨v1.x 期间最重要的两个新能力v1.2.0 响应拦截器feat(handler): response interceptor即responseInterceptor()处理器源码 response-interceptor.ts使用方式见 factory.ts 的 JSDoc 示例与 recipes/response-interceptor.md。随后v1.2.1修复代理原始响应头v1.3.0使其与 Node 默认utf8编码对齐并新增bodyParser 之后仍尝试代理 body的能力。v1.3.0 body 兜底try to proxy body even after body-parser middleware——与fixRequestBody互补。其余亮点v1.1.0在ETIMEDOUT时返回 504status-code.ts 的getStatusCode映射可印证、移除 lodash 依赖、服务器关闭时同步关闭代理v1.1.1在使用router时target变为可选、移除camelcase依赖v1.0.2处理自定义router的 rejected promisev1.0.0是 v2 之前的重要边界——feat(createProxyMiddleware): explicit import http-proxy-middleware [BREAKING CHANGE]显式导入替代默认导出并开始导出 TypeScript 类型v0.21.0引入async router与async pathRewrite对应 src/types.ts 中Promisestring | undefined返回签名。四、v0.x功能奠基期0.0.5 → 0.21.0早期版本的每次递增几乎都对应一个至今仍在使用的核心能力值得按能力地图速览版本新增能力对应今天的形态v0.0.5初始发布—v0.1.0path rewritedeprecateproxyHostpathRewrite选项v0.2.0多路径支持pathFilter支持 string[]v0.3.0wildcard / globpathFilter基于 micromatchv0.4.0WebSocket 支持ws: truev0.5.0订阅error/proxyRes事件on: { error, proxyRes }v0.6.0proxyTable后更名routerrouter选项v0.7.0shorthand 语法express/connect 挂载修复v3 已移除 shorthandv0.8.0外部 websocket upgradewebsocket shorthand—v0.9.0订阅proxyReq事件logLevel/logProviderv3 改为loggerv0.10.0proxyTable支持 WebSocket保证 pathRewrite 用原始路径—v0.12.0onProxyReqWs/onOpen/onClose事件选项v3 收拢到onv0.13.0自定义 context matcherpathFilter函数形式v0.14.0无 context 创建代理connect path 挂载—v0.15.0-0.15.2自定义pathRewrite函数pathRewrite暴露reqWebSocket upgrade 修复PathRewriteConfig函数签名v0.16.0proxyTable更名router自定义router函数router函数/表v0.17.0context 匹配改用 RFC 3986 path排除 query—v0.17.2pathRewrite支持空字符串修复 ws 内存泄漏—v0.17.3默认错误处理 504/502/500error-response-plugin.ts 的前身v0.17.4NTLM 认证支持—v0.18.0修复 micromatch 漏洞drop node 0.x—v0.19.x / v0.20.0错误日志加固迁移到 TypeScriptPromise/async 支持micromatch4移除proxyHost/proxyTableBREAKING当前全 TS 代码库的起点v0.21.0async router / async pathRewriteTypeScript 类型支持http-proxy 1.18.0router/pathRewrite支持 Promise其中 v0.20.0 的迁移到 TypeScript与Promise / async 支持是 v0.x 阶段最重要的分水岭——从该版本起仓库源码转为 TypeScript今天src/下全部为.ts文件中间件支持 async/await 调用链。五、贯穿始终的三条工程主线梳理全部 60 余条变更记录可提炼出三条贯穿 v0.x → v4.x 的工程主线它们也决定了今天仓库的形态类型与语言工程v0.20.0 迁移 TypeScript → v1.0.0 导出类型 → v2.0.3 可选types/express→ v3.0.0 全面类型改进与 Nodehttp基础类型 → v4.2.0 导出OnProxyEvent。类型面在 src/types.ts 集中体现。架构收敛proxyHost/proxyTablev0.x→router/pathRewrite选项v0.16→context参数v0.13-v2→pathFilter选项v3.0.0→ 事件处理器重构为插件体系并支持ejectPluginsv3.0.0→ 移除legacyCreateProxyMiddleware适配器v4.0.0。API 表面从散走向聚合on命名空间、plugins数组、pathFilter、logger成为今天的统一入口。请求体/响应体处理v1.2.0 响应拦截器 → v1.3.0 bodyParser 兼容 → v2.x 空对象/类型修复 → v3.0.x multipart/form-data、json、readableLength 防护 → v4.1.x zstd、bodyless 响应、trailer 冲突 → v4.2.0 POSTbodyParserECONNRESET 诊断。核心实现集中在 fix-request-body.ts 与 response-interceptor.ts配套测试见 test/unit/fix-request-body.spec.ts 与 test/e2e/response-interceptor.spec.ts。六、升级建议与版本决策参考基于上述变更记录给出面向实际升级的决策建议仍在使用 v2 的工程先按 MIGRATION_V3.md 的 6 点清单迁移到 v3可临时借助legacyCreateProxyMiddleware过渡随后一次性升级 v4v4 是 ESM-onlyCommonJS 工程需同步改造模块系统且 Node 必须不低于^22.15.0package.json。从 v3 升级 v4重点确认三件事——legacyCreateProxyMiddleware是否仍在使用v4 已删除是否依赖旧版http-proxy的私有行为引擎已替换为httpxy事件模型以httpxy为准可对照 src/types.ts 的事件签名Node 版本是否满足engines要求。关注新能力若需要 Hono 支持使用http-proxy-middleware/hono子路径的createHonoProxyMiddlewareexamples/hono/index.js 有完整示例若处理压缩响应/请求体v4 已覆盖 gzip/deflate/br/zstd若排查 POST bodyParser 场景的 ECONNRESETv4.2.0 的内置诊断消息可直接给出修复方向。变更日志是理解一个库设计取舍的最佳时间线。结合 CHANGELOG.md、MIGRATION.md、MIGRATION_V3.md 与src/源码对照阅读你既能看到为什么 API 变成了今天的样子也能在新版本发布时快速评估升级风险。赞分享后端API网关【免费下载链接】http-proxy-middleware:zap: The one-liner node.js http-proxy (httpxy) middleware for connect, express, next.js and more项目地址https://gitcode.com/gh_mirrors/ht/http-proxy-middleware点击查看免费下载相关推荐yfinance 版本演进全解析从 0.0.1 到 1.6.0 的变更日志深度解读yfinance 版本演进全解析从 0.0.1 到 1.6.0 的变更日志深度解读 本篇文章基于仓库根目录 CHANGELOG.rst https://lin数据分析金融科技Floci 版本演进全解析从 1.0.0 到 2.1.0 的变更日志深度解读Floci 版本演进全解析从 1.0.0 到 2.1.0 的变更日志深度解读 Floci 是一个免费开源的本地 AWS 模拟器AWS Local Emulastlink 版本演进全解从 v1.2.0 到 v1.8.1 的变更日志深度解读stlink 版本演进全解从 v1.2.0 到 v1.8.1 的变更日志深度解读 stlink 是面向 STMicroelectronics STM32 MC嵌入式硬件开发开发工具调试器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表