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

AWS API Gateway要求URL两次编码 路径参数带空格请求报错如何解决?

问题根因

该报错是URL双重编码导致的签名不匹配:报错中出现的%2520是空格被两次编码的结果——空格第一次编码为%20,第二次编码时%被转义为%25,最终得到%2520。AWS API Gateway的签名校验会比对前端请求的实际路径和签名用的规范字符串(Canonical String),二者编码不一致就会抛出该错误。
另外你配置的$util.urlDecode()属于集成请求阶段的参数处理逻辑,签名校验在该步骤之前执行,所以这个配置不会解决签名匹配的问题。


解决步骤

1. 修复Angular前端编码逻辑

Angular的HttpClient默认会自动对URL路径做编码,如果你手动调用了encodeURI()/encodeURIComponent()处理路径参数,就会触发双重编码:

  • 常规场景下直接删掉手动编码的逻辑,使用Angular默认的自动编码即可
  • 特殊场景必须手动编码时,要关闭HttpClient的自动编码开关,示例代码:
import { HttpClient, HttpContext } from '@angular/common/http';
import { ENCODE_URL } from '@angular/common/http';

// 手动编码路径参数后关闭默认编码
const requestUrl = `/data/${id}/hello/${encodeURIComponent(message)}`;
this.http.get(requestUrl, {
  context: new HttpContext().set(ENCODE_URL, false)
}).subscribe(res => { /* 处理响应 */ });

如果项目使用AWS Amplify对接API Gateway,额外检查Amplify的API模块配置,关闭自动编码路径的配置项。

2. 调整API Gateway参数配置

进入API Gateway对应接口的「路径参数」配置页:

  • 关闭{Some message with a space}参数的自动URL解码开关,避免API Gateway收到请求后先解码参数再生成规范字符串,导致和前端签名的字符串不一致

3. 验证效果

改完后抓包确认实际发请求的URL中空格编码为%20,此时签名用的规范字符串和实际请求路径一致,报错即可解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:15:02