【发布时间】: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 问题,我在这里缺少什么?或者有没有更好的方法来处理这个问题?
【问题讨论】:
标签: amazon-web-services amazon-ec2 cors amazon-cloudfront amazon-elb