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 时阻止了混合内容的主要内容,如果未能解决你的问题,请参考以下文章
阻止:在 HTTPS 中加载 Laravel CSS 和 JS 时出现混合内容错误