记一次nodejs的https调用问题

本文探讨了在NodeJS环境中,前端与后端皆采用HTTPS时,使用Axios发起请求遇到的ERR_CERT_AUTHORITY_INVALID错误。经过多次尝试,最终通过Nginx代理将HTTP服务器上的请求转换为HTTPS,同时确保前后端使用同一套SSL证书,成功解决跨域及证书验证问题。

记一次nodejs的https调用问题

 

关键字: nodejs、https、ssl, 前端、后端

 

【问题描述】:

  • - 前端和后端都使用nodejs, 
  • - 都是 https server
  • - 前端调用后端,使用axio发起请求,

因为请求URL为https路径,结果总是报ERR_CERT_AUTHORITY_INVALID错误.

浏览器日志如下:

Failed to load resource: net::ERR_CERT_AUTHORITY_INVALID

问题出现了,发起冲锋,伙计。

1. 首先, google, baidu一番,尝试了很多方法,比如设置agent, 见如下链接,https://github.com/axios/axios/issues/535, 结果并没有解决问题,失败。

2. 然后,尝试把后端改成http,但是chrome浏览器已经不允许在https应用中向http url发起请求,失败。

详细日志如下:

Mixed Content: The page at '<URL>' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint '<URL>'. This request has been blocked; the content must be served over HTTPS.

3. 再来,尝试把前端改成http, 结果因为安全问题浏览器禁用了一些设备。不行。

还是只能回到老路上,和https死磕。

 

【解决方案】:

- 前后端都用http server

- 对外都暴露为https地址

- 通过nginx将前后端的https代理到实际的http server.

- 前端调用后端使用的是后端暴露给外部的https url。

- nginx代理https到内部http时,前后端配置使用同一套ssl key. 

现在问题是解决了,但是具体原因并不清楚,谁能解释一二,请不吝赐教。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值