Cors - 如何处理需要自定义标头的预检选项请求?(AWS:使用 vpc 端点的私有 API 网关)

Kev*_*vin 6 amazon-web-services amazon-vpc aws-api-gateway

我看过有关此问题的帖子,但没有任何问题或答案与我的问题足够接近,无法提供有效的答案。

我无法通过浏览器向 API 发送请求。

据我了解,问题在于,当您向 API 网关发送请求时;浏览器将首先发送预检选项请求。此预检请求不会添加任何自定义标头,即:x-apigw-api-idheader. 这会导致返回 403,甚至没有命中选项请求。

我的理解是客户端无法控制预检请求,它由浏览器处理。

获取请求通过邮递员工作,选项请求也是如此,但前提是我x-apigw-api-id为每个请求添加标头。

通过邮递员返回的标头并x-apigw-api-id添加到请求

{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET,OPTIONS","Access-Control-Allow-Headers":"Content-Type,X-Api-Key,","Content-Type":"application/json"}

我删除标题,得到一个403 forbidden.

这个问题有解决方法吗?发送选项请求时也许不需要 x-apigw-api-id ?

我在发帖之前查过的一些问题:

小智 1

可以通过将 VPC 终端节点关联到您的私有 API 来解决此问题。这将为您的私有 API 生成 Route53 别名。从文档来看,

当您将 VPC 终端节点与私有 API 关联时,API Gateway 会生成新的 Route53 ALIAS DNS 记录,您可以使用该记录来调用私有 API,就像调用边缘优化或区域 API 一样,而无需覆盖主机标头或传递 x- apigw-api-id 标头。

https://docs.aws.amazon.com/apigateway/latest/developerguide/associate-private-api-with-vpc-endpoint.html