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 配置的冲突问题,您可以按照以下步骤操作:

  1. 创建一个具有 $default 路由的 HTTP API。如果您已经有一个现成的 API,可以直接使用它。
  2. 启用 CORS 并配置一个贪婪路由,例如 OPTIONS/{proxy+},无需指定授权人。
  3. 为该路由添加一个集成,以返回 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/