包含特殊字符 (`<>^|`) 的 URL 被 api 网关阻止,永远不会到达 lambda

URLs containing special characters (`<>^|`) blocked by api gateway, never makes it to lambda

如何获取包含任何这些特殊字符 <>^| 的 url 请求,使其到达 api 网关后面的 lambda,而不是在 api 网关被阻止?


问题:我们有一个由 api 网关触发的 lambda,并且 lambda 可以正常响应大多数请求。但是,带有某些特殊字符的 url (<>^|) returns a 400 bad_request 从未被传递给 lambda。当在 url 中使用 url 编码的替代方案(即 %7C 代替 |)时,lambda 响应没有问题。

起初,我们的团队假设包含这些特殊字符的请求,特别是竖线 (|),被 AWS WAF 阻止了。但是 WAF 图表没有记录请求曾经命中,导致我们认为这可能是一个 api 网关问题。


已尝试的内容:运行 同一个 curl 针对已部署的服务器请求 10 次。其中九次,在 url 端点中使用了特殊字符,第十次,使用了等效的编码。

编码尝试已通过,lambda 响应没有问题。所有其他九次尝试均失败,并且未显示在 AWS 控制台或 WAF 图表中。


除了通知我们的用户始终将 url 正文中的这些特殊字符编码为 'fix' 之外,非常感谢任何对此 api 网关问题的见解。谢谢。

并非所有字符都受支持。来自 docs:

Path segments can only contain alphanumeric characters, hyphens, periods, commas, colons, and curly braces. Path parameters must be separate path segments.