首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >API网关v2未从OPTIONS调用返回CORS标头

API网关v2未从OPTIONS调用返回CORS标头
EN

Stack Overflow用户
提问于 2021-09-23 19:01:37
回答 1查看 78关注 0票数 1

当我从本地主机上运行的网站发送帖子时,我得到了一个API网关v2,它指向一个运行CORS问题的Lambda。作为故障排除的一部分,我用curl模拟了一个印前检查请求。它的工作方式和我预期的不一样。

以下是我在API网关中的CORS设置(仅限开发,不支持prd):

aws apigatewayv2 get-api --api-id=redacted的CORS部分

代码语言:javascript
复制
    "CorsConfiguration": {
        "AllowCredentials": false,
        "AllowHeaders": [
            "content-type"
        ],
        "AllowMethods": [
            "HEAD",
            "OPTIONS",
            "POST"
        ],
        "AllowOrigins": [
            "*"
        ],
        "MaxAge": 600
    },

我使用这个脚本来查询它:

代码语言:javascript
复制
source='localhost'
dest='https://redacted.execute-api.us-west-2.amazonaws.com/redacted/'
verb='POST'
echo $source $dest $verb
curl -I -X OPTIONS \
  -H "Origin: ${source}" \
  -H "Access-Control-Request-Method: ${verb}" \
  -H "Access-Control-Request-Headers: origin" \
  "${dest}"

响应为:

代码语言:javascript
复制
HTTP/2 204
date: Thu, 23 Sep 2021 18:03:25 GMT
apigw-requestid: GIMpJhH4PHcES5g=

通过阅读MDN文档herethis answer here,我期望API Gateway会返回一个包含Access-Control-Allow-Origin的响应。但我什么也得不到。更改源代码以包含http://并没有改变结果(我也不期望它会改变,我认为CORS在这种情况下只关心域)。

注意,很多回答都涉及到“您忘记部署它了”--但是API Gateway v2缺省为“自动部署”,而这个实例使用的是这个缺省值--每次更改它时都会部署它。

注意:我已经在我的lambda中设置了'Access-Control-Allow-Origin': '*'"Content-Type": "application/json",,但我认为这还没有走那么远,所以lambda现在不是问题的一部分。我是不是误解了?

如何使用curl检查AWS API Gateway v2上的CORS?

我还应该为aws-api-gateway-v2创建一个标签吗?它与v1稍有不同,所以Terraform对它使用了不同的模块。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-17 19:18:01

这归根结底是拒绝的标头。简而言之: API网关中任何被拒绝的头部都会导致404。这是一个有效的curl

代码语言:javascript
复制
curl 'https://redacted.execute-api.us-west-2.amazonaws.com/redacted' -I \
  -X 'OPTIONS' \
  -H 'authority: redacted.execute-api.us-west-2.amazonaws.com' \
  -H 'accept: */*' \
  -H 'access-control-request-method: POST' \
  -H 'access-control-request-headers: content-type' \
  -H 'origin: http://localhost:8080' \
  -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-site: cross-site' \
  -H 'sec-fetch-dest: empty' \
  -H 'referer: http://localhost:8080/' \
  -H 'accept-language: en-US,en;q=0.9' \
  --compressed
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69305625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档