Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用OpenAPI为AWS API网关配置CORS?

如何使用OpenAPI为AWS API网关配置CORS?
EN

Stack Overflow用户
提问于 2020-07-04 15:00:15
回答 1查看 2.4K关注 0票数 0

我有一个应用编程接口的OpenAPI规范,我通过CDK部署它。该规范如下所示:

代码语言:javascript
运行
AI代码解释
复制
openapi: 3.0.1
info:
  title: My API
  description: My REST API with CORS enabled
  version: 0.1.0

x-amazon-apigateway-cors:
  allowOrigins:
    - "*"
  allowCredentials: true
  exposeHeaders:
    - "x-apigateway-header"
    - "x-amz-date"
    - "content-type"
  maxAge: 3600
  allowMethods:
    - "*"
  allowHeaders":
    - "x-apigateway-header"
    - "x-amz-date"
    - "content-type"
    - "Authorization"

components:
  securitySchemes:
    lambda:
      type: "apiKey"
      name: "Authorization"
      in: "header"
      x-amazon-apigateway-authtype: "custom"
      x-amazon-apigateway-authorizer:
        authorizerUri: "{{my-lambda-authorizer}}"
        authorizerResultTtlInSeconds: 300
        type: "token" 

paths:
  /user/{id}:
    get:
      summary: Get info of specified user.
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
      security:
        - lambda: []
      x-amazon-apigateway-integration:
        uri: "{{my-lambda}}"
        passthroughBehavior: "when_no_match"
        httpMethod: "POST"
        type: "aws_proxy"

当我试图通过fetch()访问它时,我得到了一个错误的Failed to load resource: Origin http://localhost:8000 is not allowed by Access-Control-Allow-Origin

代码语言:javascript
运行
AI代码解释
复制
fetch('https://api.example.com/user/1')
        .then(response => response.json())
        .then((user: User) => {
            // do something
        })
        .catch((err) => {
            console.log("Error: " + err);
        });

这个应用程序接口可以在api.example.com上访问,我在localhost:8000上使用Gatsby在本地运行该网站。

当我将x-amazon-apigateway-cors放在规范的根目录时,AWS docs似乎声明CORS是启用的,但是当我试图访问该API时,CORS似乎没有启用(或工作)。如何为我的API开启CORS,而不需要在控制台进行配置?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-04 17:10:04

Amazon API Gateway提供两种类型的API: REST API和HTTP API。REST API是最初随Amazon API Gateway引入的API,而HTTP APIs got announced at the end of 2019

根据对您的OpenAPI规范的描述,我假设您正在尝试部署REST API。然而,HTTP扩展只适用于x-amazon-apigateway-cors OpenAPI。

您现在有两个选择:要么切换到使用HTTP API,要么手动配置CORS。只要你不需要features only supported by REST APIs,我建议你改用HTTP API,因为这是Amazon API Gateway提供的更现代的API。

如果您想使用REST API,启用CORS需要更多的手动配置。亚马逊网络服务在Enabling CORS for a REST API resource中记录了这一点。本质上,你必须确保你的集成返回正确的CORS头。对于NodeJS AWS Lambda函数,可能如下所示:

代码语言:javascript
运行
AI代码解释
复制
exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        headers: {
            "Access-Control-Allow-Headers" : "Content-Type",
            "Access-Control-Allow-Origin": "https://www.example.com",
            "Access-Control-Allow-Methods": "OPTIONS,POST,GET"
        },
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

对于CORS运行前请求,您还必须确保OPTIONS-request也返回正确的头。要实现这一点,最简单的方法是在OpenAPI规范中为OPTIONS-request添加一个模拟集成。这看起来像是:

代码语言:javascript
运行
AI代码解释
复制
options:
  responses:
    '200':
      description: Default response
      headers:
        Access-Control-Allow-Headers:
          schema:
            type: string
        Access-Control-Allow-Methods:
          schema:
            type: string
        Access-Control-Allow-Origin:
          schema:
            type: string
  x-amazon-apigateway-integration:
    type: mock
    requestTemplates:
      application/json: |
        {"statusCode" : 200}
    responses:
      default:
        statusCode: 200
        responseParameters:
          method.response.header.Access-Control-Allow-Headers: "'*'"
          method.response.header.Access-Control-Allow-Methods: "'OPTIONS,POST'"
          method.response.header.Access-Control-Allow-Origin: "'https://example.com/'"

还请记住modern browsers don't support localhost as origin for CORS,所以你可能也需要解决这个问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62730683

复制
相关文章
将Emoji表情添加到项目中 顶
选择完需要的表情,点击消息预览就可以看到效果了,有一个微笑表情是QQ表情~~ 可以不用管它。
linapex
2019/03/26
1.9K0
将Emoji表情添加到项目中
                                                    顶
GitLab 冷知识:使用 Gitlab Webhook 触发 Pipeline
笔者入职极狐 GitLab 已经一年有余,在日常工作中高强度使用 GitLab,积累了不少使用经验和技巧。遂将这些经验归纳总结,开启一个名为《GitLab 冷知识》的新系列文章,介绍那些 GitLab 中比较冷门却十分好玩的功能。
郭旭东
2022/12/05
2.7K0
GitLab 冷知识:使用 Gitlab Webhook 触发 Pipeline
Gitlab利用Webhook+jenkins实现自动构建与部署
之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台。通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布。
我被狗咬了
2020/12/15
1.4K0
Gitlab利用Webhook+jenkins实现自动构建与部署
Webhook 是什么?Webhook与API有什么区别
相信很多用户在使用企业微信机器人、飞书机器人、钉钉机器人、腾讯云HiFlow场景连接器、腾讯问卷这些应用时,都有一个问题,这些应用都提供了Webhook,但是部分没有代码开发能力的人可能很困惑,Webhook究竟是什么?我应该如何使用?
阿那个沫
2022/11/04
14.7K0
Webhook 是什么?Webhook与API有什么区别
Gitlab 利用 Webhook+jenkins 实现自动构建与部署
之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台。通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布。
民工哥
2020/11/09
1K0
Gitlab 利用 Webhook+jenkins 实现自动构建与部署
Gitlab利用Webhook实现Push代码后的jenkins自动构建
之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台。通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布。这种方式每次在发版的时候,需要人工去执行jenkins上的构建动作,有时显得过于繁琐。于是就想到了Gitlab的Webhook功能,通过Webhook的相关设置,可以实现代码Push后,自动去触发jenkins上的构建动作,这样就不需要人工干预去执行发版操作了。设置如下: 1)Jenkins上的操作 通常,jenkins在项目配置时是可以配置远程构建触发
洗尽了浮华
2018/01/23
1.7K0
Gitlab利用Webhook实现Push代码后的jenkins自动构建
基于 Gitlab 关联 Jenkins 实现自动化构建
之前部署了 Gitlab 的代码托管平台和 Jenkins 的代码发布平台。通常是开发后的代码先推到 Gitlab 上管理,然后在 Jenkins 里通过脚本构建代码发布。这种方式每次在发版的时候,需要人工去执行 Jenkins 上的构建动作,有时显得过于繁琐。
DevOps时代
2019/08/23
5.3K0
3天学会Jenkins_10_gitlab or github代码提交后自动构建1
转载注明出处,欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 https://xiaobaiai.net或者我的CSDN https://blog.csdn.net/freeape
别打名名
2019/12/23
8960
3天学会Jenkins_10_gitlab or github代码提交后自动构建1
图床,通过Python调用api上传图片到Gitlab
用过一段时间的PicGo,但是感觉太重了,为了一个上传图片去装一个软件有点太麻烦。 然后目前个人感觉也就Gitlab速度还可以一点,于是昨天翻了官方文档踩了很多坑,总算搞好了。 现将关键代码放到这里。
SingYi
2023/08/23
4850
图床,通过Python调用api上传图片到Gitlab
GitLab API使用
获取管理员private_token 1.使用管理员身份登录 2.进入配置界面 配置界面 3.获取private_token,并粘贴到项目目录src/main/resource/propertie
Meet相识
2018/09/12
9.9K2
GitLab API使用
DevOps之代码模块设计浅析
DevOps(开发:Development和运维:Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
yuanyi928
2020/07/22
9140
Java版 Gitlab Webhook + 钉钉机器人通知
在下才疏学浅,谨以此奉上Github地址为社区尽绵薄之力 : Gitlab Webhook+钉钉机器人通知
EalenXie
2022/01/21
1.1K0
Java版 Gitlab Webhook + 钉钉机器人通知
腾讯会议API - 获取REST API & Webhook应用对接信息
购买腾讯会议企业版或者商业版,将自动开通企业 API 接入能力,企业管理员可登录腾讯会议官网(https://meeting.tencent.com/),单击页面右上角【用户中心】,选择左侧菜单栏中的【高级】-【restApi】进入应用创建页面,点击添加应用即可创建密钥对。
liquid
2021/06/24
2.4K0
腾讯会议API - 获取REST API & Webhook应用对接信息
Webhook 与 API:有什么区别?
数字时代的关键驱动力是通信。作为人类,我们希望技术能够帮助我们更快、更轻松地与更多人交流。想要实现这一点,我们必须首先找到一种让技术相互交流的方法,这就是 API 和 webhook 发挥作用的地方。
用户9958066
2022/09/09
2.6K0
Python Gitlab Api 使用
简述 公司使用gitlab 来托管代码,日常代码merge request 以及其他管理是交给测试,鉴于操作需经常打开网页,重复且繁琐,所以交给Python 管理。 官方文档 安装 pip install python-gitlab 环境: py3 DEMO # -*- coding: utf-8 -*- __Author__ = "xiewm" __Date__ = '2017/12/26 13:46' """ gitlab 经常使用到的api DOC_URL: ht
py3study
2020/01/06
6.2K0
gitlab官方api使用
Gitlab作为一个开源、强大的分布式版本控制系统,已经成为互联网公司、软件开发公司的主流版本管理工具。使用过Gitlab的都知道,想要提交一段代码,可以通过git push提交到远程仓库,也可以直接在Gitlab平台上修改提交。然而上述两种提交方式都是人工提交代码,需要手动登录Gitlab或者在第一次commit的时候提供Gitlab帐号和密码。
陈不成i
2021/06/07
1.9K0
Gitlab配置webhook报错:Urlis blocked: Requests to the local netwo..解决
在Gitlab 10.6以后的版本为了安全起见,默认不允许向本地网络发送webhook请求,但是可以使用管理员身份修改默认设置!
非著名运维
2022/06/22
2.3K0
Gitlab配置webhook报错:Urlis blocked: Requests to the local netwo..解决
腾讯会议API - Webhook介绍与简单实现
可以看到,REST API是由用户应用主动向腾讯会议后台发起请求,然后后台进行响应;而Webhook是由特定事件来触发,然后腾讯Webhook服务主动向用户发起请求。例如在配置Webhook时订阅了用户入会事件消息之后,当会议中有人入会时,后台就会给用户配置的Webhook应用发送POST消息。
liquid
2023/08/17
3K0
将Sublime添加到鼠标右键
2、找到 HKEY_CLASSES_ROOT/*/shell 目录,在此目录下操作。
新码农
2020/03/05
3.1K0
前端构建 DevOps - Gitlab Api
DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
Cookieboty
2020/10/23
8340
前端构建 DevOps  - Gitlab Api

相似问题

为什么我不能做悬停?

213

为什么我不能做全屏

12

为什么我不能做'cout << 3*“;'?

34

为什么我不能做黄瓜呢?

21

为什么我不能做这个更新?

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档