如何将Heroku上的Node.js应用从HTTPS切换为HTTP以调用HTTP协议Django API
Heroku应用无法降级为HTTP访问的说明
目前Heroku全平台已经默认对所有应用开启强制HTTPS跳转,没有提供官方配置入口可以将应用访问地址改为HTTP协议,即使手动输入HTTP地址,也会被自动重定向到HTTPS地址,你的需求无法直接实现。
你遇到的是浏览器的混合内容安全策略拦截,报错如下:
xhr.js:177 Mixed Content: The page at 'https://myapp.herokuapp.com/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint (API HTTP URL). This request has been blocked; the content must be served over HTTPS.
该规则是现代浏览器的默认安全策略,只要页面是HTTPS协议加载,所有前端发起的HTTP请求都会被拦截,和服务端配置无关。
可落地的解决方法
- 最优方案:给Django API配置HTTPS
给部署Django API的服务器配置免费的SSL证书,将API接口改为HTTPS协议访问,完全符合安全规范,没有后续兼容问题。 - 次选方案:用Node.js服务端做请求转发
调整前端请求逻辑:- 前端不再直接调用HTTP协议的Django API,改为请求同域下的Node.js后端接口
- Node.js后端收到请求后,由服务端向Django API发起HTTP请求,服务端请求不受浏览器混合内容策略限制
- Node.js后端拿到Django返回结果后,再回传给前端即可解决拦截问题
- 临时调试方案(仅本地自测可用)
打开Chrome浏览器访问你的Heroku应用,点击地址栏左侧的锁形图标,进入「站点设置」,找到「不安全内容」选项,设置为「允许」,刷新页面后即可正常发起请求。该方法仅对你本地浏览器生效,其他用户访问仍然会被拦截,禁止用于生产环境。
内容的提问来源于stack exchange,提问作者user109606
相关产品推荐
相关产品推荐

