【问题标题】:How to catch ERR_CERT_AUTHORITY_INVALID in javascript如何在 javascript 中捕获 ERR_CERT_AUTHORITY_INVALID
【发布时间】:2025-12-23 18:20:12
【问题描述】:

我正在开发的 Web 应用程序需要从本地网络中的多个不同 IOT 获取数据,例如,

const response = await fetch("https://192.168.0.245/api/auto/login", options);

由于是https连接,而且每个IOT都携带一个自签名的SSL证书,所以上面的fetch()会抛出错误“TypeError: Failed to fetch”(因为证书还没有被接受),并且应用程序将在浏览器的控制台中显示以下内容

OPTIONS https://192.168.0.245/api/auto/login net::ERR_CERT_AUTHORITY_INVALID

我需要的是能够在 javascript 中捕捉到这个错误。具体来说,我需要能够捕获不同的错误,例如 ERR_CERT_AUTHORITY_INVALID、ERR_SSL_PROTOCOL_ERROR 或 ERR_CONNECITON_REFUSED... 等,以便相应地显示不同的错误消息。

不幸的是 fetch() 函数在上述所有这三个不同的错误下总是抛出相同的“TypeError: Failed to fetch”异常。

无论如何我可以捕捉到这个特定的 ERR_CERT_AUTHORITY_INVALID 异常吗?

谢谢。

【问题讨论】:

  • 在客户端是否 100% 强制执行?也许您可以使用更好的工具通过服务器端脚本代理请求。例如 curl。

标签: javascript fetch iot


【解决方案1】:

我查看了fetch pollyfill code,它的功能应该与本机浏览器实现相同(尽管错误消息不同)。它不包括有关遇到的特定错误的信息。有twolines 会抛出TypeErrors,它们看起来都是这样的:

reject(new TypeError('Network request failed'))

所以您只会收到一条错误消息而没有其他信息。查看TypeError 的文档,除了简单的Exception 提供的信息之外,您不会获得任何额外信息。 TypeErrorspec 在这种情况下需要抛出的。

您也许可以找到另一个更具体地报告错误的库。我搜索了一下,但很难仅从文档中找出库是否具有该功能。您可能必须尝试一下,看看它们提供了什么样的错误报告。这里有几个选项:

或者您可以尝试直接使用XMLHttpRequest 实施解决方案。 fetch pollyfill 代码是一个很好的起点。您可以分叉该项目并添加一些 console.logs 以查看它报告的错误类型。

【讨论】:

    【解决方案2】:

    如果您的 Internet 连接不安全,则可能会出现此错误。表示它不是 https。

    或者您可以从服务器端删除 ssl 证书。所以你的请求格式应该是“http://192.168.0.245/api/auto/login”。

    【讨论】:

      【解决方案3】:

      ERR_CERT_AUTHORITY_INVALID 错误与 HTTPS 连接有关。要解决它,您必须在浏览器中输入 API 基本 url(例如 https://192.168.0.245(或 https://192.168.0.245/api)是 https://192.168.0.245/api/auto/login 的基本 url),然后点击高级按钮,然后点击不安全按钮。

      在此之后您可能会遇到 404 错误页面。现在您可以在项目中再次使用 API,而不会出现任何问题。

      【讨论】: