Skip to content

Beta2.1 - #1462

Merged
cmliu merged 24 commits into
mainfrom
beta2.1
Aug 12, 2026
Merged

Beta2.1#1462
cmliu merged 24 commits into
mainfrom
beta2.1

Conversation

@cmliu

@cmliu cmliu commented Aug 12, 2026

Copy link
Copy Markdown
Owner

PR #1461 · Beta2.1 版本说明

分支:beta2.1main
变更:_worker.js(+276 / −96)、CHANGELOG(+26)
版本号:2026-08-11 14:45:22(对应 CHANGELOG 2.1.20260811144522

概述 / Summary

本 PR 汇聚自 2026-07-29 以来的 XHTTP 链路优化与混淆能力增强,核心围绕三件事:传输链路重构(降 CPU)、上行数据合包(降开销)、obfs padding 混淆(反检测),并修复一处链式代理解析 Bug。

English: This PR consolidates XHTTP improvements since 07-29: stream-pipe refactor (lower CPU), uplink packet coalescing, XHTTP obfs padding (anti-detection), and a chained-proxy parsing fix.

主要变更 / Changes

1. XHTTP TCP 传输链路重构(性能优化)

  • TCP 数据改为双向直通管道request.body.pipeTo(socket.writable) + socket.readable.pipeTo(IdentityTransformStream),移除了旧链路(ReadableStream + 上行写入队列 + BYOB/Grain 逐块搬运),显著降低 CPU 占用。
  • forwardataTCP 新增 “仅建立连接”模式:建连并写入首包后直接返回 socket 交由上层 pipe 直通;保留直连失败后自动切换反代的兜底逻辑,gRPC / WS 调用方不受影响
  • 引入 AbortController 统一管理上/下行清理,避免连接泄漏。

2. XHTTP 上行数据合包机制

  • 新增 创建上行Grain合包流:小块数据先缓冲合包,达到目标字节后统一写入;不足目标字节时由 1ms 定时器自动冲刷。
  • 效果:减少小包频繁写入带来的资源开销,大文件上传更流畅

3. XHTTP obfs padding 混淆(反检测增强)

  • 标识派生:混淆头名与查询键从 UUID 动态派生(头 = UUID[1:7],键 = _ + UUID[25:31]),替代原先基于 Refererx_padding 的识别方式,更难被识别为协议特征。
  • 接收端校验:新增 HPACK Huffman 码长表与校验逻辑——padding 值 Huffman 编码后长度须落在 98 ~ 1002 字节区间;无 padding 的请求直接放行(向后兼容旧客户端)。
  • 响应注入:响应头自动附带随机生成的 padding 串(Base62 字符集,长度 100 ~ 1000),模拟真实客户端流量特征。
  • 订阅端配置获取传输协议配置 为 xhttp 输出 extra 参数(xPaddingObfsMode: truexPaddingMethod: tokenishxPaddingPlacement: queryInHeaderxPaddingHeader/Key),客户端开箱即用。

4. XHTTP UDP 分支独立

  • UDP 处理从原 处理XHTTP请求 中拆出为独立的 处理叉HTTPUDP请求,保留 Trojan UDP 反代 与 DNS 转发逻辑,TCP/UDP 互不影响。

5. Bug 修复

  • 修复 XHTTP 链式代理参数解析:路径末尾多余的 / 会导致反代配置失效,现已兼容末尾斜杠(/video/xxx//trojan=xxx/ 均可正常解析)。

变更明细 / File Changes

文件 变更 说明
_worker.js +276 / −96 上述全部代码改动
CHANGELOG +26 新增 2.1 系列版本记录(8/09 ×2、8/10、8/11)

兼容性与风险 / Compatibility & Risk

  • 无新增依赖、无配置项破坏性变更,部署即生效(重新部署 Worker 即可)。
  • 路由识别由 Referer 改为 UUID 派生头/查询键:旧版客户端无 padding 时仍放行,不影响存量用户。
  • 建议在 beta 环境观察 CPU 占用与上传吞吐后再合入 main。

相关版本记录 / CHANGELOG

  • 2.1.20260811144522 — 优化 XHTTP 上行:数据合包机制(本 PR 主改动)
  • 2.1.20260810030901 — 新增 XHTTP obfs padding 接收端支持(tokenish / queryInHeader)
  • 2.1.20260809231057 — 修复 XHTTP 链式代理路径末尾 / 失效
  • 2.1.20260809201158 — 优化 XHTTP 传输链路(pipe 直通)、连接管理(仅建立连接模式)、UDP 分支独立

cmliu and others added 24 commits August 9, 2026 20:13
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
fix: 更新版本号至2026-08-09并优化XHTTP传输链路和连接管理
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
fix: 更新版本号至2026-08-09并修复链式代理路径末尾斜杠处理
fix: 修复响应URL生成逻辑
Copilot AI lite review requested due to automatic review settings August 12, 2026 03:35
@cmliu
cmliu merged commit 92fc6cc into main Aug 12, 2026
7 checks passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

该 PR 将 beta2.1 分支中自 2026-07-29 以来的 XHTTP 链路优化与混淆增强合并到 main:重构 TCP 传输为双向 pipe 直通以降低 CPU、引入上行合包以减少小包写入开销、增加基于 UUID 派生的 obfs padding 识别/校验与响应注入,并修复链式代理路径末尾 / 导致的解析失效。

Changes:

  • 重构 XHTTP(TCP) 数据转发为 request.body -> socket.writablesocket.readable -> response 的直通 pipe,并为 forwardataTCP 增加“仅建立连接”模式与统一清理逻辑。
  • 新增上行 Grain 合包流,将小块数据缓冲合并后再写入 socket,降低频繁 writer.write() 的开销。
  • 引入 XHTTP obfs padding:UUID 派生 header/key、接收端 Huffman 字节长度校验、响应侧自动注入 padding;同时拆分独立 UDP 处理函数并修复链式代理末尾斜杠解析。

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
_worker.js 实现 XHTTP 直通 pipe / 上行合包 / padding 混淆校验与注入、UDP 分支拆分、链式代理解析修复,并更新版本号。
CHANGELOG 增补 2.1 系列版本记录,描述上述功能合入时间点与摘要。

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread _worker.js
@@ -1,4 +1,4 @@
const Version = '2026-07-29 23:57:34';
const Version = '2026-08-11 14:45:22';
Comment thread _worker.js
Comment on lines 766 to 773
} finally {
const 保持木马UDP反代下行 = !转发失败 && 首包.isUDP && 首包.协议 === 'trojan' && 木马UDP上下文.反代地址 && 木马UDP上下文.反代Socket;
上行写入队列.清空();
if (转发失败) 失效远端连接();
释放远端写入器();
if (!保持木马UDP反代下行) try { 木马UDP上下文.反代Socket?.close() } catch (e) { }
try { reader.releaseLock() } catch (e) { }
const 保持木马UDP反代下行 = !转发失败 && 首包.协议 === 'trojan' && 木马UDP上下文.反代地址 && 木马UDP上下文.反代Socket;
if (!保持木马UDP反代下行) {
try { 木马UDP上下文.反代Socket?.close() } catch (e) { }
closeSocketQuietly(叉桥);
}
try { reader.releaseLock() } catch (e) { }
}
Comment thread _worker.js
Comment on lines +627 to +631
try {
const 响应URL = new URL('https://x.invalid/');
响应URL.searchParams.set(本机Padding键, 生成叉HTTPPadding串(100 + Math.floor(Math.random() * 901)));
responseHeaders.set(本机Padding头, 响应URL.toString());
} catch (e) { }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants