You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django如何返回自定义HTTP状态文本以适配App端Bug?

自定义HTTP 429响应状态消息的解决方法

核心问题分析

你得到的h2 200结果,本质是当前请求用了HTTP/2协议——HTTP/2设计时移除了状态原因短语(即TOO_MANY_REQUESTS或你要的CUSTOM_MESSAGE部分),仅传输状态码;同时可能存在代理或框架拦截了你的429响应,强制返回了200。

具体解决步骤

  • 强制使用HTTP/1.1协议
    HTTP/1.1支持自定义状态原因短语,需确保请求和响应都走HTTP/1.1:

    • 若用Nginx代理,在对应location块禁用HTTP/2:
      listen 443 ssl; # 去掉http2参数
      return 429 "CUSTOM_MESSAGE";
      
    • 若为后端代码(如Java Tomcat),直接设置状态码和原因短语:
      HttpServletResponse response = ...;
      response.setStatus(HttpStatus.TOO_MANY_REQUESTS.value());
      response.setReasonPhrase("CUSTOM_MESSAGE");
      
  • 排查中间件拦截
    检查CDN、反向代理(如Cloudflare、APIGateway)是否有拦截429响应的规则,这类服务常默认把429转换为自定义页面或200响应,需在控制台关闭相关拦截策略,允许透传原始响应。

  • 兼容HTTP/2的替代方案
    若无法放弃HTTP/2,推荐在响应体中携带自定义消息,这是现代API的标准做法:

    {
      "status_code": 429,
      "error_message": "CUSTOM_MESSAGE"
    }
    

    让App端读取响应体中的error_message字段,而非依赖状态行的原因短语。

内容的提问来源于stack exchange,提问作者stick Cour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 02:10:36