为什么本地 HTTPS 接口请求会被浏览器拦截?
我在本地用 Node.js 搭了个 HTTPS 服务,证书是自签名的,浏览器访问时点了“高级”→“继续前往”能打开页面。但页面里用 fetch 请求同一个域名的 API 时,却直接报错说不安全,连提示都没有,这到底是为啥?
我试过在 Chrome 启动时加 –ignore-certificate-errors 参数,也手动把证书导入到系统信任列表了,但 JS 发起的请求还是失败。控制台只显示 net::ERR_CERT_AUTHORITY_INVALID。
fetch('https://localhost:8443/api/data')
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error('请求失败:', err));
首先,你得确保在fetch请求里设置
mode: 'no-cors'是不可取的,这反而会限制请求。正确做法是在服务器端配置CORS头来允许跨域请求。但关键还是证书问题。虽然你在系统层面导入了证书,浏览器的JS环境可能没识别到。建议直接在Chrome里导入证书:
1. 打开Chrome设置,进入隐私和安全
2. 点击“管理证书”
3. 在受信任的根证书颁发机构里导入你的自签名证书
或者更简单的方法:用localhost做测试域名时,从 mkcert 这个工具生成证书,它会自动配置好系统信任,连浏览器都能认。安装mkcert后运行:
然后用生成的证书启动Node服务就行。
记得重启Chrome让修改生效。这样应该就能正常发请求了,我以前也被这个坑搞过,真够呛。