记一次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.
现在问题是解决了,但是具体原因并不清楚,谁能解释一二,请不吝赐教。
本文探讨了在NodeJS环境中,前端与后端皆采用HTTPS时,使用Axios发起请求遇到的ERR_CERT_AUTHORITY_INVALID错误。经过多次尝试,最终通过Nginx代理将HTTP服务器上的请求转换为HTTPS,同时确保前后端使用同一套SSL证书,成功解决跨域及证书验证问题。

992

被折叠的 条评论
为什么被折叠?



