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

AWS API Gateway PUT请求异常:REST客户端返回404与无认证令牌错误

排查AWS API Gateway PUT请求404+“missing authentication token”问题

先拆解你遇到的核心矛盾:API Gateway控制台内部测试正常,但外部调用失败,且明明没开启授权校验却收到认证错误。这种情况大概率不是授权问题,而是请求路径/参数解析不匹配或者API部署状态导致的,结合你提到的test_json编码前后的差异,我们一步步分析:

1. 为什么会出现404+“missing authentication token”?

你说没开启授权或API密钥要求,但收到这个错误,其实这是API Gateway的一个“误导性提示”——当请求的路径、方法或者参数格式不符合你在Gateway里定义的规则时,Gateway经常会返回这个错误(而非直接返回404)。

结合你提到的「test_json用URL编码值就能正常响应」,问题根源很明确:未编码的test_json包含JSON格式的特殊字符(比如{}、:、"),导致客户端/浏览器对URL的解析出错,请求路径和你在Gateway定义的资源路径不匹配。Gateway找不到对应的资源,就抛出了这个容易混淆的错误。

2. React请求中test_json的传递方式:建议用请求体而非Query参数

PUT方法的设计初衷就是通过请求体传递要更新的资源数据,Query参数更适合传递简单的标识/筛选参数(比如你的auth_id、time_stamp)。把复杂JSON放在Query参数里有几个明显的问题:

  • 容易触发URL编码/解码错误,就是你现在遇到的情况
  • URL有长度限制,一旦test_json内容稍大就会直接请求失败
  • 不符合RESTful规范,后续维护和可读性都很差

所以你的React代码应该调整为这样:

// 示例:请求体传test_json,Query只放简单参数
fetch('https://your-api-id.execute-api.region.amazonaws.com/prod/your-resource-path', {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json', // 必须指定这个头部,确保Gateway正确解析
  },
  // Query参数可以用URLSearchParams处理
  body: JSON.stringify({
    test_json: yourTestJsonData // 直接传原始JSON对象即可
  }),
  params: {
    auth_id: 'your-auth-id-value',
    time_stamp: Date.now().toString()
  }
})

同时,你需要在API Gateway的PUT方法里配置请求体映射模板:如果后端是Lambda,直接配置application/json的映射模板为$input.json('$'),就能让Gateway把请求体的JSON数据完整传递给后端。

3. 额外要确认的几个点

控制台测试正常但外部调用失败,还要检查:

  • 你是否已经把API部署到了对应的阶段(比如prod),而不是只在控制台测试却没部署
  • 外部调用的URL是否正确:必须用阶段的Invoke URL,而不是控制台的临时测试URL
  • 检查Gateway的资源路径和你请求的路径是否完全一致(比如有没有大小写错误、多了/少了斜杠)

总结

当前的核心问题是未编码的test_json导致URL解析错误,触发Gateway返回误导性的认证错误,最佳解决方式是把test_json从Query参数移到PUT请求体中,同时确保API已正确部署且请求路径完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:02:12