ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

【AI】 Claude Code 缓存失效与 Token 暴涨的底层原因和解决方案

【AI】 Claude Code 缓存失效与 Token 暴涨的底层原因和解决方案 关注我天天好文第三方 API 用户遭遇 Claude Code 缓存失效与 Token 暴涨的底层原因近期许多使用第三方 API 转发 Claude Code 的用户遇到了推理变慢、Token 消耗暴涨的问题。经过抓包分析罪魁祸首是 Claude Code 在每个请求中隐蔽插入的一行名为x-anthropic-billing-header的上下文作为系统提示词的第一块发送。该请求头中包含一个名为CCHClaude 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 层隐藏到修改版 BunBunthropic的 Zig native HTTP 层。JS 中只保留静态占位符请求发送前由 native 层动态计算真实 CCH 并替换用于提高 Token 被提取后伪造官方请求的逆向成本。本质属于客户端完整性/来源校验 混淆防护并非不可破解的安全边界。详细解释Anthropic 把“请求合法性校验值 CCH”的真实计算从 JS 层下沉到自己改造的 Bun/Zig 原生网络层目的是让用户难以直接提取 Token 后伪造官方客户端请求。JS 层 CCH 00000... // 假值/占位符 ↓ 请求即将发出 ↓ Bunthropic 的 Zig 原生 HTTP 层 ↓ 动态计算真实 CCH ↓ 覆盖占位符 ↓ 发送请求BunthropicAnthropic 修改过的 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 暴涨问题得以彻底解决。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进