我真的被困在这里,我发现的与cors相关的解决方案都没有帮助,所以这是我的最后选择。
我用POST方法创建了一个API网关,该方法触发了Lambda函数,该函数将一个项添加到DynamoDB表中。
当我在API Gateway中尝试POST方法时,一切工作都很好,但是如果我尝试从s3存储桶上托管的网站进行AJAX调用,则会出现以下错误提示:
对预检请求的响应未通过访问控制检查:所请求的资源上没有“ Access-Control-Allow-Origin”标头。
我已经在API网关上启用了cors,并且基本上将我可以找到的所有cors Access-Controll-Allow-etc添加到了执行AJAX调用的JavaScript中,但无济于事。我仍然遇到相同的错误...
非常感谢您提供任何可能的帮助,因为我现在只是在圈子中调试。
谢谢!
答案 0 :(得分:1)
如果您想从s3托管站点访问S3存储桶,则需要根据文档here在S3存储桶中添加CORS规则。
规则将是这样的-<AllowedOrigin>
将是您的网站网址
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>http://www.example1.com</AllowedOrigin>
<AllowedMethod>PUT</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<AllowedMethod>DELETE</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
如果您想从s3托管站点访问您的API ,则可以
或
OPTIONS
请求的CORS标头。例如,在AspNet中,只需添加middleware即可完成此操作。 答案 1 :(得分:1)
您必须记住在控制台中启用CORS之后再次部署API。 (愚蠢的我忘记了这一点,并且一直在圈子里奔跑。)
另一方面,帮助调试的一种好方法是卷曲API网关的URL,以查看API网关的响应(Access-Control-Allow-Origin
中是否存在CORS标头。如果没有,那么您知道API网关未正确启用CORS。
< HTTP/1.1 200 OK
< Date: Sat, 25 Jul 2020 13:20:18 GMT
< Content-Type: application/json
< Content-Length: 215
< Connection: keep-alive
< x-amzn-RequestId: 1f786173-23f7-412e-a106-64105235b253
< Access-Control-Allow-Origin: * //See if this is missing
< x-amz-apigw-id: QOyu2E15tjMFoGQ=
< X-Amzn-Trace-Id: Root=1-5f1c3192-8b2f67e02bcb71ce1e0bb254;Sampled=0
<
{"statusCode":200,"body":{"key":"value"}}* Connection #0 to host 1111.ap-northeast-1.amazonaws.com left intact
受此启发:https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-test-cors.html