AWS Api Gateway 仅在 OPTIONS 调用时不响应 CORS 标头
Posted
技术标签:
【中文标题】AWS Api Gateway 仅在 OPTIONS 调用时不响应 CORS 标头【英文标题】:AWS Api Gateway does not respond with CORS headers only on OPTIONS call 【发布时间】:2021-12-20 04:48:14 【问题描述】:我尝试将 CORS 添加到我的 HTTP API,它确实适用于 GET、POST 等,但不适用于 OPTIONS 调用。可能是什么原因?
它是 AWS API Gateway 中全新的 HTTP API。我添加了一些 hello world lambda 函数作为路线,*
作为允许的来源。我认为 OPTIONS 调用的全部意义在于发送这些标头...
这里是邮递员请求 POST
这里有 OPTIONS
这是我的路线配置
这是我的 CORS 配置
【问题讨论】:
代理还是非代理? 无代理。路线只是/
ANY
OPTIONS 没有 CORS - 你是什么意思它适用于 GET & POST 但不适用于 OPTIONS? GET/POST 请求是否会返回 CORS 错误?实际问题是什么?请问可以加截图吗?
我添加了 Postman 截图。我希望 OPTIONS 请求的响应也有一个 access-control-allow-origin
标头,以便我的 API 在浏览器中工作
您是否在 API Gateway 中配置了 CORS 以允许使用 OPTIONS 方法?另外,您的 Lambda 是否有适当的返回响应?
【参考方案1】:
您应该能够轻松地在您的规范中为您的 API 添加 OPTIONS 支持:
options:
summary: CORS support
description: |
Enable CORS by returning correct headers
tags:
- CORS
responses:
200:
description: Default response for CORS method
headers:
Access-Control-Allow-Origin:
schema:
type: string
Access-Control-Allow-Methods:
schema:
type: string
Access-Control-Allow-Headers:
schema:
type: string
content:
x-amazon-apigateway-integration:
type: mock
requestTemplates:
application/json: |
"statusCode" : 200
responses:
default:
statusCode: '200'
responseParameters:
method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key'"
method.response.header.Access-Control-Allow-Methods: "'*'"
method.response.header.Access-Control-Allow-Origin: "'*'"
responseTemplates:
application/json: |
这应该适用于非代理集成,并直接从 API 而不是从 lambda 返回正确的标头。您可能需要修改响应参数以满足您的需要。
对于代理集成,您需要在 lambda 函数中实现响应 (https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html)
【讨论】:
谢谢,但是如何正确导入呢?我尝试将它添加到我导出的 openapi 配置中。添加了路由,但没有集成。请求端点时,我得到 204 No Content.以上是关于AWS Api Gateway 仅在 OPTIONS 调用时不响应 CORS 标头的主要内容,如果未能解决你的问题,请参考以下文章
如果在 Terraform 模块中创建了 aws_api_gateway_integration,如何在 aws_api_gateway_deployment 资源上填充depends_on?
响应未定义 - aws-api-gateway-client