你的 API 对大负载返回 400?恭喜,你刚刚构建了一个礼貌的 DoS 网关

发布: (2026年2月19日 GMT+8 11:00)
3 分钟阅读
原文: Dev.to

Source: Dev.to

返回 400 处理超大负载的问题

当客户端发送巨大的请求体时,许多 API 会返回:

400 Bad Request

这个响应具有误导性。超大负载应该使用 413 Payload Too Large 拒绝,这会明确告知客户端请求大小超出了服务器的限制。返回 400 暗示的是数据本身有问题,而不是大小问题。

错误状态码的后果

如果服务器在已经开始处理请求后返回 400,可能已经:

  • 消耗了 CPU 和内存资源
  • 打开了数据库连接
  • 执行了其他昂贵的操作

当多个并发的超大请求到达时,累计效应会把一个简单的验证问题转变为拒绝服务(DoS)场景。

Rentgen 中的大负载测试

为了捕捉此类 bug,Rentgen 包含一个 大负载测试

  • 采用合法请求,仅放大请求体的大小。
  • 保持 JSON 结构和请求头正确。
  • 在大小阈值处期望立即返回 413

任何其他响应都表明服务器在进行不必要的工作。

真实案例

该问题在 ChatGPT API 中被发现,超大负载被错误处理。报告后,bug 在一天内得到修复,展示了正确处理的重要性。

为什么此 bug 仍然存在

  • 人为假设:开发者常认为通用错误码已经足够。
  • 缺乏规范:正确的状态码是一个简单、 “乏味” 的修复,却能防止更大的问题。

简单的解决方案

  • 对超过允许大小的请求返回 413 Payload Too Large
  • 确保服务器在早期拒绝请求,而不去处理请求体。

收获

始终返回 413 并不是要苛刻,而是要负责任。正确处理大负载可以防止不必要的资源消耗,保护你的 API 不受意外的 DoS 攻击。

完整故事和技术拆解: https://rentgen.io/api-stories/large-payload-handling.html

0 浏览
Back to Blog

相关文章

阅读更多 »

Apex B. OpenClaw,局部嵌入

本地嵌入用于私有记忆搜索。默认情况下,OpenClaw 的 memory search 会将文本发送到外部的 embedding API,通常是 Anthropic 或 OpenAI……

Apex 1. OpenClaw, 供应商历史

从 ChatGPT、Anthropic 和 Google Gemini 导入聊天记录。使用 OpenClaw,你可以做的最强大的事情之一是 bootstrap 你的记忆……