AWS 在调用 API 时阻止了混合内容

Posted

技术标签:

【中文标题】AWS 在调用 API 时阻止了混合内容【英文标题】:AWS blocked mixed content when calling API 【发布时间】:2018-06-01 09:33:14 【问题描述】:

我在 digitalOcean 有一个前端应用程序,域名为 testDO。此域具有 SSL 证书。所以所有的请求都来自https://testDO.com

我在 AWS 中有一个后端服务器,它是通过将 war 文件部署到 beanstalk 中创建的。它的名称为testAWS.us-east-2.elasticbeanstalk.com

当我直接从 URL 调用 API 时,例如 http://testAWS.us-west-2.elasticbeanstalk.com/myAPI/getName 它可以工作。当我从前端调用相同的 API 时,我被阻止:混合内容。这是因为它的http而不是https吗?解决方法是什么?

【问题讨论】:

【参考方案1】:

是的,这是因为您的 HTTPS 站点尝试通过被浏览器阻止的 HTTP 访问内容。您需要在前端服务器上同时使用 HTTPS 或代理请求,并在那里终止 SSL 并将其转发到 Beanstalk 中的 API 服务器。

注意:由于前端和后端位于两个不同的环境中,因此为了安全起见,最好同时使用 HTTPS 而不是代理方法。

【讨论】:

我没有 AWS 的域名。我使用了 ELB,所以我有类似 testAWS.us-west-2.elasticbeanstalk.com 的东西,我该如何添加 SSL?有什么链接可以参考吗? docs.aws.amazon.com/elasticloadbalancing/latest/classic/…【参考方案2】:

您可以创建一个 CloudFront 分配并将其与 https 一起转换为 http。您还需要在响应中启用 CORS 以访问跨域域请求。

客户端 --> CloudFront --> 您的 http API(使用 CORS 响应)。

希望对你有帮助。

【讨论】:

【参考方案3】:

您需要使用您的域设置您的 AWS Elastic Beanstalk 环境,或者您可以将 HTTPS 与自签名证书一起用于开发和测试目的。

您可以在 AWS S3 中使用上传您的前端,在 AWS 静态网页中,端点为 http,因此您不会遇到这种混合内容问题。

参考:

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https.html

【讨论】:

以上是关于AWS 在调用 API 时阻止了混合内容的主要内容,如果未能解决你的问题,请参考以下文章

AWS API 调用被 CORS 策略阻止

阻止:在 HTTPS 中加载 Laravel CSS 和 JS 时出现混合内容错误

混合内容:Iframe 将 https 调用转换为 http 并且请求被阻止

捕获“阻止加载混合活动内容”CORS 错误

Angular AWS 被 CORS 策略阻止

为啥我会收到“阻止:混合内容”?