CORS 请求未成功 - Cloudfront 和 ELB over HTTPS

CORS request did not succeed - Cloudfront and ELB over HTTPS

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

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://abcde-1xx8x3xx3x.ap-south-1.elb.amazonaws.com/api/auth/testapi. (Reason: CORS request did not succeed).

前端: 我们正在使用 Cloudfront 从 S3 交付前端。云端 URL link 工作正常,页面加载正常。

在行为部分的云端,

  1. 将 headers 列入白名单 [Accept, Access-Control-Allow-Origin, Access-Control-Request-Headers, Access-Control-Request-Method, Authorization, Content-Type, Referer, X-Access-Token, X-HTTP-Method-Override, X-Requested-With]
  2. Viewer Prorocol 策略 - 将 HTTP 重定向到 HTTPS
  3. 允许的 HTTP 方法 - GET、HEAD、OPTIONS、PUT、POST.....

后端: 后端 nodejs rest api 在 EC2 中并通过面向 Internet 的 Classic Load Balancer 交付。 EC2 在 VPC 内。我们正在使用 ELB URL 进行 API 测试。 API 在 Postman 中有效。在这里,我们将负载均衡器协议用作 HTTPS,并将实例协议用作 HTTP。附有 SSL 证书。

在 nodejs 应用程序上,我们设置 headers 如下

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');

在使用 fetch api 的 fontend 代码上,我们正在设置 模式:'cors'

尝试查看其他类似的 cors 问题,但无济于事。

任何人都可以建议我如何解决这个 cors 问题,我在这里缺少什么?或者有更好的方法来处理这个问题吗?

这实际上不是 CORS 错误。这是一个恰好涉及 CORS 请求的连接问题。

Reason: CORS request did not succeed

The HTTP request which makes use of CORS failed because the HTTP connection failed at either the network or protocol level. The error is not directly related to CORS, but is a fundamental network error of some kind.

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 证书——那是亚马逊的域名,而不是您的域名。您无法为您并不真正控制的域获取 SSL 证书。你需要你自己的域,在这里,和一个 SSL 证书来匹配它,附加到平衡器。

您应该会发现,通过将此 API URL 直接输入浏览器的地址栏,您 也会 得到一个错误。该错误不会是 CORS 错误,而是您需要解决的实际错误。

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