当前位置: 首页 > 知识库问答 >
问题:

AWS API网关CORS对选项确定,对POST失败

戚成礼
2023-03-14

1个资源,1个POST方法集成了lambda。

我使用了“enable cors”选项--我尝试在资源和POST请求上应用此选项(并在之后部署API)。

在API GW中,我可以看到access-control-allog-origin在POST method-method Response区域下的200个响应头中列出。

在curl中:选项调用

curl -X OPTIONS -H "Access-Control-Request-Method: POST" \
     -H "Access-Control-Request-Headers: Content-Type" \
     -H "Origin: http://example.com" --verbose <endpoint>

回应是:

< HTTP/1.1 200 OK
< Content-Type: application/json
...
< Access-Control-Allow-Headers: Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token
< Access-Control-Allow-Methods: POST,OPTIONS
< Access-Control-Allow-Origin: *
...

但是用post:

curl -X POST -d '{}' -H "Content-Type: application/json" \
     -H "Origin: http://example.com" --verbose <endpoint>
< HTTP/1.1 200 OK
< Content-Type: application/json
...

我还能查什么?

共有1个答案

华宏逸
2023-03-14

问题是API网关使用选中的“lambda Proxy integration”选项调用了我的lambda函数。

我相信在向新创建的lambda函数添加API网关触发器时,这是默认激活的。

在API Gateway-Resource-Method视图中,“Integration Response”框是灰色的,似乎没有办法(即使是Enable CORS函数)在其中添加Access-Control-Allog-Origin标头,根据@abhigna_nagaraja的说法,这是必需的。

解决方案:如果使用“lambda代理集成”,请将'access-control-allog-origin':'*'标头添加到lambda函数中。

更好的是:在同一个视图集成请求中,关闭“lambda Proxy Integration”并再次启用CORS(之后部署)。

(然后,在回调中,您必须只返回有效负载json,而不是{statusCode,headers,body}对象。)

更新:

如果您不确定是在http状态代码中还是在json负载中返回请求响应状态信息,请阅读一些有用的内容:

http状态与json状态

 类似资料:
  • 我们正在尝试从C#Windows服务调用AWS API网关来执行后台作业。哪个应该触发API网关定期初始化请求? 我们使用RestSharp调用APIendpoint,该类称为AwsAuthenticator,它继承自RestSharp.Authenticators.IAAuthenticator。但当我们调用API Gateway时,收到的错误是“我们计算的请求签名与您提供的签名不匹配。请检查您

  • 然后,我创建了一个简单的html页面,作为S3上的静态网站托管,使用Route53将一个域指向该页面,并开始使用jQuery$.ajax测试API进行调用。 所有这些看起来都很简单、简单,并且与文档中所解释的完全一样,只是GET工作并按预期将文本输出到控制台。POST版本会导致以下错误: 选项原始响应标头: 返回200 OK

  • 我试图使用CloudFormation在API网关中部署一个API。这些方法要求启用CORS,我按照这里的模板在Cloudformation模板中启用CORS for API Gateway来做到这一点。这是我的模板 部署API后,方法返回一个200,响应标头如下 访问-控制-允许-起源→* 通过→1.1 sdlkfnsdlk.CloudFront.net(CloudFront) X-AMZ-CF

  • 附注:我没有张贴整个控制器。这里只包括http请求部分。

  • Ceph 对象网关是一个构建在 librados 之上的对象存储接口,它为应用程序访问Ceph 存储集群提供了一个 RESTful 风格的网关 。 Ceph 对象存储支持 2 种接口: 兼容S3: 提供了对象存储接口,兼容 亚马逊S3 RESTful 接口的一个大子集。 兼容Swift: 提供了对象存储接口,兼容 Openstack Swift 接口的一个大子集。 Ceph 对象存储使用 Ceph

  • 我正在试着对所选项目在旋转器中的定位做一个轻微的调整。不是下拉列表项,因为我在适配器中已经有了一个自定义视图,而是特定的选定项。 正如你在截图中看到的,“任何”是当前选择的项。但它在容器中的对齐很奇怪,因为它必须容纳下拉列表中最长的字符串,即“Dark Purple Burnt Sienna”(或其他)。我想将选定的文本向右对齐,这样“任何”就在下拉指示器旁边,而不是中间的出路。 我尝试对我的自定