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

Cloud Run无法处理POST请求 所有请求被转GET返回404如何解决

问题根因

Cloud Run本身不会主动篡改请求方法,出现所有非GET请求被转成GET、最终返回404的问题,核心原因是请求链路中存在3xx重定向,而绝大多数HTTP客户端在收到301/302重定向响应时,会默认把POST等非GET请求改成GET再发起跳转后的请求,最终导致POST接口因为收到GET请求匹配不到路由返回404。
常见触发重定向的场景:

  • 用HTTP协议访问Cloud Run的*.run.app默认域名,Cloud Run默认会返回302跳转至HTTPS地址
  • 前置的Cloud HTTP(S)负载均衡配置了HTTP转HTTPS、路径重写、尾斜杠自动补全等规则,且跳转用了301/302状态码
  • 应用本身使用的Web框架默认开启了强制HTTPS跳转、尾斜杠自动匹配跳转,跳转状态码用了301/302
修复方案

按以下顺序排查即可解决:

  • 确认请求协议
    调用Cloud Run服务时必须使用https://开头的地址,不要使用http://前缀,避免触发Cloud Run默认的HTTP到HTTPS跳转。代码中调用服务时,检查SDK配置的服务地址是否漏写HTTPS前缀。
  • 修正前置负载均衡的重定向配置
    如果你给Cloud Run配置了外部HTTP(S)负载均衡:
    • 将HTTP转HTTPS的跳转状态码从默认的301/302改为307 Temporary Redirect或308 Permanent Redirect,这两个状态码在HTTP规范中明确要求重定向时不得修改请求方法和请求体
    • 检查路径匹配、重写规则,所有需要跳转的场景都统一使用307/308状态码,不要用301/302,尤其是尾斜杠自动补全的规则
  • 修正应用框架配置
    检查你使用的Web框架(Flask、Express、Spring Boot、Django等)配置:
    • 强制HTTPS跳转功能如果开启,将跳转状态码改为307/308
    • 要么关闭框架的自动尾斜杠重定向功能,要么保证接口路由和请求路径完全匹配,避免触发路径跳转
验证方法

用curl加verbose参数发起请求,就能看到完整链路中是否存在重定向:

curl -v -X POST https://<你的Cloud Run服务地址>.run.app/接口路径 -d "测试参数=1"

如果输出中存在301 Moved Permanently或302 Found的响应状态码,同时带有Location响应头,就说明定位到了触发跳转的层级,对应修改即可。

内容的提问来源于stack exchange,提问作者Shazi Awaludin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:48:27