CORS请求未成功-通过HTTPS的Cloudfront和ELB

时间:2019-02-09 22:02:24

标签: amazon-web-services amazon-ec2 cors amazon-cloudfront amazon-elb

当我们使用https url访问ELB的后端api时,抛出错误

  

跨域请求被阻止:“同源起源”策略禁止读取https://abcde-1xx8x3xx3x.ap-south-1.elb.amazonaws.com/api/auth/testapi处的远程资源。 (原因:CORS请求未成功。)

前端: 我们正在使用Cloudfront从S3提供前端。 cloudfront URL链接有效,并且页面可以正常加载。

在行为部分的云端,

  1. 将标头列入白名单[接受,访问控制允许来源,访问控制请求标头,访问控制请求方法,授权,内容类型,引荐来源,X-访问令牌,X-HTTP -Method-Override,X-Requested-With]
  2. Viewer协议策略-将HTTP重定向到HTTPS
  3. 允许的HTTP方法-GET,HEAD,OPTIONS,PUT,POST .....

后端: 后端nodejs rest api在EC2中,并通过Classic Load Balancer面向互联网交付。 EC2在VPC中。我们正在使用ELB URL进行API测试。该API可在邮递员中使用。在这里,我们将负载均衡器协议用作HTTPS,将实例协议用作HTTP。对此附有SSL证书。

在nodejs应用程序上,我们将标题设置如下

res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Request-Method', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');    
res.header('Access-Control-Allow-Headers','Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With, Access-Control-Allow-Origin, Origin, X-HTTP-Method-Override, Accept, X-Access-Token');
res.setHeader('Access-Control-Allow-Credentials', 'true');
在使用提取API的情况下,在fontend代码上

设置模式:'cors'

试图查看其他类似的cors问题,但没有任何帮助。

有人可以建议我如何解决此问题吗?我在这里想念什么?还是有更好的方法来处理生产?

1 个答案:

答案 0 :(得分:0)

这实际上不是CORS错误。这是一个连接问题,碰巧涉及CORS请求。

  

Reason: CORS request did not succeed

     

使用CORS的HTTP请求失败,因为HTTP连接在网络或协议级别均失败。该错误与CORS没有直接关系,而是某种基本的网络错误。

     

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSDidNotSucceed

您大概已经对URL https://abcde-1xx8x3xx3x.ap-south-1.elb.amazonaws.com/api/auth/testapi进行了一些修改,但是请注意,不可能在以.elb.amazonaws.com结尾的URL上使用HTTPS。这是因为无法获得amazonaws.com域名的SSL证书-这是Amazon的域名,而不是您的域名。您无法获得并非由您真正控制的域的SSL证书。您需要在此处拥有自己的域,并需要一个与之匹配的SSL证书(附加到平衡器)。

您应该发现,通过直接将此API URL打孔到浏览器的地址栏中,还会 出现错误。该错误将不是CORS错误,而是您需要解决的实际错误。

还请注意,您所描述的错误不涉及您的S3和CloudFront设置。