AWS API Gateway HTTP API是否允许查询字符串含未转义冒号?
AWS API Gateway HTTP API 查询字符串未转义冒号触发默认路由疑问
问题场景
我维护的API需要接收start和end两个查询参数,参数值要求是带冒号的ISO 8601格式日期时间字符串(比如YYYY-MM-DDTHH:MM:SSZ)。
用AWS API Gateway HTTP API作为前端网关时,发现一个问题:当请求里的start或end参数包含未转义的冒号时,请求会被API Gateway路由到$default路由;但把冒号URL编码成%3A后,就能正常匹配到预期的路由。
规范依据
根据RFC 3986的定义,查询字符串允许使用未转义的冒号:
query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
从规范来看,未转义冒号属于合法的查询字符串字符,不应被拦截或触发路由异常。
行业对比
像GitHub Issues API这类提供日期时间过滤功能的主流API,都支持在查询字符串中直接使用未转义的冒号,没有类似的路由问题。
文档排查情况
我查阅了AWS官方文档,但没找到明确说明HTTP API禁止查询字符串使用未转义冒号的内容:
- HTTP API的已知问题页面里,没有提及查询字符串的禁用字符;
- 只有REST API的相关说明中提到了部分字符限制(比如管道符
|、大括号{}、分号;),但完全没提到冒号的限制。
疑问
想明确两个问题:
- AWS API Gateway HTTP API不允许查询字符串包含未转义冒号是否是有意设计的限制?
- 是否存在官方文档明确说明了这一限制?
内容的提问来源于stack exchange,提问作者grumbler
相关产品推荐
相关产品推荐

