为什么本地 HTTPS 接口请求会被浏览器拦截?

码农明艳 阅读 2

我在本地用 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));
我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
Designer°建刚
这个问题其实挺常见的,特别是在本地开发环境下。浏览器对HTTPS请求的处理跟页面加载是分开的,即使你已经信任了自签名证书,JavaScript发起的请求还是会严格检查。

首先,你得确保在fetch请求里设置 mode: 'no-cors' 是不可取的,这反而会限制请求。正确做法是在服务器端配置CORS头来允许跨域请求。

但关键还是证书问题。虽然你在系统层面导入了证书,浏览器的JS环境可能没识别到。建议直接在Chrome里导入证书:

1. 打开Chrome设置,进入隐私和安全
2. 点击“管理证书”
3. 在受信任的根证书颁发机构里导入你的自签名证书

或者更简单的方法:用localhost做测试域名时,从 mkcert 这个工具生成证书,它会自动配置好系统信任,连浏览器都能认。安装mkcert后运行:
mkcert -install
mkcert localhost

然后用生成的证书启动Node服务就行。

记得重启Chrome让修改生效。这样应该就能正常发请求了,我以前也被这个坑搞过,真够呛。
点赞
2026-03-31 01:00