CORS 请求未成功 - Cloudfront 和 ELB over HTTPS
Posted
技术标签:
【中文标题】CORS 请求未成功 - Cloudfront 和 ELB over HTTPS【英文标题】:CORS request did not succeed - Cloudfront and ELB over HTTPS 【发布时间】:2019-07-03 19:19:54 【问题描述】:当我们访问 ELB 的后端 api 一个 https url 时,会抛出一个错误
跨域请求被阻止:同源策略不允许读取位于https://abcde-1xx8x3xx3x.ap-south-1.elb.amazonaws.com/api/auth/testapi 的远程资源。 (原因:CORS 请求未成功)。
前端: 我们正在使用 Cloudfront 从 S3 交付前端。云端 URL 链接有效,页面加载正常。
在行为部分的云端,
-
将标头列入白名单 [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]
查看器 Prorocol 策略 - 将 HTTP 重定向到 HTTPS
允许的 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 应用程序中,我们设置标题如下
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 代码上,我们设置 mode: 'cors'
尝试查看其他类似的 cors 问题,但没有任何帮助。
谁能建议我如何解决这个 cors 问题,我在这里缺少什么?或者有没有更好的方法来处理这个问题?
【问题讨论】:
【参考方案1】:这实际上不是 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 证书——这是亚马逊的域名,而不是您的域名。您无法获得您无法真正控制的域的 SSL 证书。您需要自己的域,在这里,以及与之匹配的 SSL 证书,附加到平衡器。
您应该会发现,通过将此 API URL 直接输入浏览器的地址栏,您也会收到错误消息。该错误不会是 CORS 错误,而是您需要解决的实际错误。
另请注意,您所描述的错误不涉及您的 S3 和 CloudFront 设置。
【讨论】:
谢谢@Michael - sqlbot。对我们有意义。因此,我们放弃了 HTTPS 并继续使用 HTTP 进行测试设置。您的上述建议应该对我们的生产有所帮助。以上是关于CORS 请求未成功 - Cloudfront 和 ELB over HTTPS的主要内容,如果未能解决你的问题,请参考以下文章
缺少 CORS 标头“Access-Control-Allow-Origin” - CORS 请求未成功