HTTP API CORS 授权 - AWS API Gateway - 云端解析
作者:API传播员 · 2025-12-27 · 阅读时间:4分钟
AWS 的 HTTP API 的 CORS(跨域资源共享)支持。然而,当在这些 API 上使用 $default 路由并启用授权时,配置 CORS 可能会变得复杂,常常会导致 CORS 错误,例如缺少 Access-Control-Allow-Origin 头。在本文中,我们将深入探讨这一问题,并提供解决方案。
解决方案
要解决 $default 路由与 CORS 配置的冲突问题,您可以按照以下步骤操作:
- 创建一个具有
$default路由的 HTTP API。如果您已经有一个现成的 API,可以直接使用它。 - 启用 CORS 并配置一个贪婪路由,例如
OPTIONS/{proxy+},无需指定授权人。 - 为该路由添加一个集成,以返回 CORS 所需的标头,从而避免 404 错误。
以下是一个返回 CORS 标头的示例 Lambda 函数代码:
import json
def lambda_handler(event, context):
return {
"httpStatus": 200,
"headers": {"Access-Control-Allow-Origin": "*"},
"body": json.dumps(event)
}
为什么这有效?
在为 $default 路由启用 CORS 和授权时,需要注意以下几点:
- OPTIONS 方法的特殊性:OPTIONS 方法仅用于预检请求(preflight request),因此它既不需要也不期望授权。然而,HTTP API 的
$default路由会捕获所有未明确定义的方法和路由请求,包括 OPTIONS 请求。 - 路由优先级:在 HTTP API 中,
OPTIONS/{proxy+}路由的优先级高于$default路由。通过这种方式设置路由,客户端可以在无需授权的情况下发送 OPTIONS 请求,而后端会返回 CORS 所需的标头,从而解决 CORS 问题。
有关路由优先级的更多信息,请参考 API Gateway HTTP API 路由 API 请求。
测试
完成上述配置后,您需要部署 API(如果未启用自动部署功能,请手动部署)。然后,您可以使用以下 [curl](https://www.explinks.com/wiki/what-are-curl-url-uri/) 命令测试 API:
curl -X OPTIONS https://{api-id}.execute-api.{region}.amazonaws.com -I -H 'Origin: https://example.com' -H 'Access-Control-Request-Method: GET'
预期的 curl 响应示例如下:
HTTP/2 200
date: Fri, 03 Mar 2021 10:44:59 GMT
content-type: application/json
content-length: 1165
access-control-allow-origin: https://example.com
access-control-allow-methods: GET,OPTIONS
access-control-allow-headers: access-control-allow-origin,authorization
access-control-max-age: 10
apigw-requestid: TayGXXXXXXXXXXXXXXXMZA=
在线工具测试
除了使用 curl,您还可以使用以下在线工具测试 API 的 CORS 配置:
通过这些工具,您可以快速验证 API 是否正确返回了 CORS 标头。
通过本文的指导,您应该能够成功配置 AWS API Gateway 的 HTTP API,使其在启用 $default 路由和授权的情况下正确处理 CORS 请求。
原文链接: https://cloudunfold.com/blog/api-gateway-http-api-with-cors-and-authorization/
热门推荐
一个账号试用1000+ API
助力AI无缝链接物理世界 · 无需多次注册
3000+提示词助力AI大模型
和专业工程师共享工作效率翻倍的秘密