全部文章

FourA 简报,2026年7月17日至7月24日

配额拒绝现在返回带有 Retry-After 的 HTTP 429 状态码。定价页面显示每个公开计划的带宽:不限量。地理定位现在返回正确的 403 状态码。

亮点

超出配额的 response 现在返回 HTTP 429 及其 Retry-After header,这与 OpenAI、GitHub 和 Cloudflare 发送的内容一致。定价页面增加了一行带宽说明 (每个公开计划都是无限的)。如果在没有地域定向功能的计划上请求 exitCountries,现在会收到一个明确的 403,指明该参数及修复方法。

新功能

配额限制现在返回 HTTP 429,而不是 402

如果您达到计划限制 (点数或带宽),response 将是 429 Too Many Requests,每次回复都会附带 Retry-After,且正文中包含指向计费周期结束时间的 resets_atreason 字段会告诉您达到了哪个限制 (plan_limit_creditsplan_limit_bandwidth),因此它不会与每分钟 rate limit 冲突。

为什么要做出这一更改?402 听起来没错 ("Payment Required"),但在实际应用中,它是 Stripe 报告扣费失败的方式,且一些 HTTP 客户端和 proxy 无法正确处理。OpenAI、GitHub、Twilio 和 Cloudflare 都使用 429 及其对应的错误代码来拒绝超出配额的情况。在这里随大流是正确的选择:世界上每个重试库都已经知道如何处理我们的 response。

对于那些进行 sleep-and-retry 的用户,Retry-After 的值上限为 24 小时。如果您想要真实的重置时间,请从 JSON 正文中读取 resets_at

定价页面上的带宽:无限

/prices 的对比矩阵中增加了一行带宽说明。每个公开计划都提供不限流量的带宽,矩阵现在明确地说明了这一点。这种信息通常不需要,直到潜在客户询问而你又找不到数据时才会显得重要。现在它已经在页面上了。

有带宽上限的自定义计划会在同一行显示其 GB 数值。

地域定向现在通过适当的错误来限制自身

如果一个 request 发送了 exitCountries 而该计划不包含地域定向功能,response 将是 403,并附带一条指明该参数以及如何修复的消息。在此之前,request 会像允许地域定向一样通过。现在它会在入口处直接失败并给出明确提示。

没有 exitCountries 的 request 不受影响。这只有在您实际请求该功能时才会生效。

控制台中关于限制和计费的小修复

三个改善体验的修复:

  • Limits 选项卡。 已保存的子选项卡 (Overview / API keys / Limits & Features) 会在渲染前恢复,因此您在重新加载时不再看到选项卡错误闪烁。
  • API Keys。 搜索框使用规范的搜索模式,而不是原生的输入框。
  • Billing。 Payment Method 下方的 meta 行现在以正确的样式渲染 (它们以前是没有样式的)。

幕后机制

计划限制的强制模式现在可以实时切换。六个数据平面限制 (单产品并发数、每分钟频率、每日浏览器数、点数、带宽、功能) 中的每一个,加上管理平面的 key 创建检查,都可以从我们团队控制的设置面板在 off、signal 和 enforce 之间切换。无需重新部署。后台刷新器每 60 秒轮询一次设置,热路径保持同步。

这对你有什么影响?当生产环境中的限制出现异常时,我们可以在一分钟内将其回调,而无需发布新代码。这也让我们能够针对每个限制逐步实施强制策略,并在每个阶段观察实际流量的表现。Signal模式记录事件但不阻塞请求;enforce模式则会开启429或403 response。我们希望将中间步骤作为一等公民,而不是紧急开关。

数据

  • Retry-After 配额拒绝上限:24小时 (实际重置时间见 resets_at)
  • 运行时设置轮询间隔:60秒
  • 无限带宽的公开计划:全部

计划限制器已经贯穿了我们过去一个月的工作。接下来:对首批限制(积分和单产品并发数是顺理成章的首选)实施强制策略,并在邮件阶段发布后发送邮件警告。