关注我天天好文
第三方 API 用户遭遇 Claude Code 缓存失效与 Token 暴涨的底层原因
近期许多使用第三方 API 转发 Claude Code 的用户遇到了推理变慢、Token 消耗暴涨的问题。经过抓包分析,罪魁祸首是 Claude Code 在每个请求中隐蔽插入的一行名为x-anthropic-billing-header的上下文(作为系统提示词的第一块发送)。该请求头中包含一个名为CCH(Claude Code Hash)的 5 位 16 进制随机字符串(例如从97bd6连续三次变为24c2d再到ead88)。Anthropic 官方服务器已知晓并会过滤该字段以正常命中缓存,但所有第三方 Anthropic 兼容代理、Amazon Bedrock 以及本地 vLLM 均无法识别,将其死板地计入系统提示词并参与前缀缓存(Prompt Caching)的 Hash 计算。由于 CCH 每次请求都在变,导致缓存前缀匹配失败,命中率直接归零。
Anthropic 设计 CCH 的底层逻辑与 Zig 编译层实现
Anthropic 官方之所以引入这套复杂的防机制,核心目的是为了“防白嫖”。Claude Code 登录走 OAuth、订阅走 Pro/Max 套餐,其费用比直接调用按 Token 计费的 API 要便宜得多。
如果Token + 请求参数就足够调用接口,用户可能订阅 Claude
→ 从客户端抠出 Token
→ 自己写脚本无限/任意调用
→ 绕过官方客户端和正常 API 计费/限制,所以 CCH 相当于增加了一个客户端真实性证明/请求签名机制。为防止用户将二进制程序中的 Token 抠出来写代码调用、享受订阅价跑任意请求,Anthropic 在底层做了一套安全防线。他们 fork 一份基于 JS 的替代运行时 Bun(命名为
Bunthropic),并在底层用 Zig 系统语言编写attribution.zig。在 JavaScript 代码层,CCH 初始被赋为一个静态占位符(全为 5 个零),而在网络请求发出的最后一刻,底层 Zig native HTTP 层会拦截并动态计算、覆盖真实的 CCH 值。由于 Zig 层运行在 JS 引擎内存之外,外部程序无法轻易获取真值,从而防范伪造请求。真实 CCH 不暴露在普通 JS API/JS heap 中,因此提取成本显著提高,但并非不可逆向。攻击者仍可通过逆向二进制、动态调试、Hook native HTTP、抓取最终网络请求、分析 attribution.zig 对应算法复现。开源社区(如 Sub2API)目前已经逆向并复刻整套 CCH 算法。
CCH 防盗用机制:Anthropic 将 CCH 请求校验从 JS 层隐藏到修改版 Bun(Bunthropic)的 Zig native HTTP 层。JS 中只保留静态占位符,请求发送前由 native 层动态计算真实 CCH 并替换,用于提高 Token 被提取后伪造官方请求的逆向成本。本质属于客户端完整性/来源校验 + 混淆防护,并非不可破解的安全边界。
详细解释
Anthropic 把“请求合法性校验值 CCH”的真实计算从 JS 层下沉到自己改造的 Bun/Zig 原生网络层,目的是让用户难以直接提取 Token 后伪造官方客户端请求。
JS 层 CCH = "00000..." // 假值/占位符 ↓ 请求即将发出 ↓ Bunthropic 的 Zig 原生 HTTP 层 ↓ 动态计算真实 CCH ↓ 覆盖占位符 ↓ 发送请求- Bunthropic:Anthropic 修改过的 Bun runtime。
attribution.zig:底层 Zig 代码,负责生成/处理这类 attribution/CCH 信息。- 关键点:JS 代码里看不到最终真实值,真实值直到 native HTTP 层才生成。
通过环境变量一键关闭 CCH 的终极修复方案
通过对 Claude Code 源码(src/constants/system.ts中的getAttributionHeaders函数)的逆向分析,可以发现一个用于控制该功能的开关。顺着isAttributionHeadersEnabled逻辑往下,代码会检查环境变量CLAUDE_CODE_ATTRIBUTION_HEADER。如果将其显式设为0或false,构建 Billing Header 的函数就会直接返回空串。因此,最简单且高效的修复方案为:打开~/.claude/settings.json文件,在env字段中将CLAUDE_CODE_ATTRIBUTION_HEADER设置为0,随后重启 Claude Code。重新抓包验证可以发现,Billing Header 字符串已完全消失,系统提示词恢复正常结构,第三方 API 的前缀缓存失效与 Token 暴涨问题得以彻底解决。