HTTPS安全站点调用无SSL子域名Web服务的解决方案咨询
问题本质说明
你遇到的是浏览器的混合内容安全策略拦截:HTTPS站点默认禁止主动发起HTTP请求,目的是避免已加密的站点加载明文资源导致数据泄露、被篡改等安全风险,这是所有现代浏览器的强制安全规则,没有可靠的全用户端绕过方法,所有可行方案本质都是将请求链路改造为全HTTPS,具体解决方案如下:
方案1:给EC2上的API服务配置SSL证书(生产环境最推荐)
- 可以直接给指向EC2的子域名申请免费的Let's Encrypt证书,操作成本极低:
- 先确认子域名的DNS解析已经正确指向EC2公网IP
- 登录EC2实例安装Certbot工具,根据你用的Nginx/Apache等Web服务,执行对应一键配置命令即可完成证书签发和HTTPS自动配置
- 配置完成后把前端调用的API地址前缀从
http://改为https://即可,不需要改动其他业务逻辑
- 该方案零成本,证书有效期90天,可配置自动续期,长期使用几乎无维护成本。
方案2:通过现有Firebase站点做反向代理
- 如果你不想改动EC2侧的现有配置,可以利用Firebase的能力做请求中转:
- 配置Firebase托管的重写规则,把指定路径(比如
/api/**)的请求转发到你的EC2 API地址 - 前端直接调用同域名下的
/api/xxx路径,请求先发到Firebase的HTTPS服务端,再由服务端转发到EC2的HTTP接口 - 服务端之间的请求不受浏览器混合内容策略限制,不会触发拦截
- 配置Firebase托管的重写规则,把指定路径(比如
- 该方案完全不需要调整EC2侧的服务配置,适合暂时不方便给EC2加SSL的场景。
方案3:临时调试方案(仅适合本地开发,禁止用于生产)
- 如果你只是本地开发阶段需要临时调试,可以手动修改浏览器启动参数禁用混合内容检查,以Chrome为例:
Windows启动命令:chrome.exe --allow-running-insecure-content
Mac启动命令:open -a "Google Chrome" --args --allow-running-insecure-content - 该方案仅对当前启动的浏览器实例生效,普通用户不会主动修改这个配置,完全不适合生产环境使用。
注意:所有前端侧的“绕开”方法(比如修改iframe配置、用未知第三方代理中转等)都存在严重安全风险,或是已经被新版浏览器修复,不建议使用。生产环境的唯一可靠选择是给API服务配置HTTPS,当前免费证书获取和配置成本极低,是性价比最高的方案。
内容的提问来源于stack exchange,提问作者Kashish Jain
相关产品推荐
相关产品推荐

