【问题标题】:Ajax request failing due to invalid SSL cert?由于 SSL 证书无效,Ajax 请求失败?
【发布时间】:2026-01-26 02:05:01
【问题描述】:

我正在使用 jQuery 来增强我的前端技能,但我遇到了一个错误,我希望它是由 SSL 证书问题引起的。

我访问了我尝试使用的 API 的原始 url,它在 chrome 中给了我这个警告:

The site's security certificate is not trusted!
You attempted to reach theAPI, but the server presented a certificate issued by an entity that is not trusted by your computer's operating system. This may mean that the server has generated its own security credentials, which Chrome cannot rely on for identity information, or an attacker may be trying to intercept your communications.

这是我使用的基本代码设置(来自here):

<body>
    <div class="results"></div>
    <script>
        $( document ).ready(function() {
            $.ajax({
                url: "https:theAPI",
                cache: false,
                success: function(html){
                    $(".results").append(html);
                }
            });
        });
    </script>
</body>

我应该更多地调查我的设置,还是 SSL 证书中存在会阻碍我的有效问题?

【问题讨论】:

    标签: jquery ajax


    【解决方案1】:

    你有两个问题。首先,自签名证书永远不会适用于可公开访问的应用程序,因为您需要每个用户以某种方式接受该证书为受信任的(正如其他人所说,通过 AJAX 是不可能的)。

    其次,即使你解决了 SSL 问题,你也很可能遇到跨域请求问题。也就是说,AJAX 不能用于进行跨域调用,除非您使用 JSONP 或目标服务器已正确配置 CORS 策略(考虑到自签名证书,我猜这不是这种情况)。

    您最好的选择可能是在您的服务器上公开一个后端 API,您可以通过 AJAX 调用该 API,然后后端进行跨域调用并公开数据以响应 AJAX 请求。如果有意义的话,您甚至可以在本地缓存远程调用的结果。

    【讨论】:

    • 确实如此。我现在得到“请求的资源上不存在‘Access-Control-Allow-Origin’标头。”我所有的研究似乎都指向它是一个服务器端问题。将数据设置为 jsonp 也会返回解析错误。
    • @TehRuby 不幸的是,您要使用 JSONP,服务器必须配合并理解正在发出 JSONP 请求,以便它应该在函数包装器中返回结果。如果您无法控制目标服务器,您可能需要在后端进行服务器到服务器调用,并通过您自己的 AJAX 端点公开该结果。所以底线是,除非您知道另一个域上的服务器支持跨域 AJAX 调用(通过 CORS 或 JSONP),否则您不应该采用这种方法。
    • 可以通过在响应标头上声明您接受它来绕过 CORS,但我还没有解决第一部分,即让 AJAX 接受自签名证书
    【解决方案2】:

    这是您正在使用的自签名证书。没有更高的权威来建立“信任”。除非客户端浏览器已经建立了私钥交换,否则它将始终导致此错误提示。通过网络浏览器的直接连接以及幕后的$.ajax() 呼叫都是如此。

    自签名证书对于测试或私人应用程序很有用,但在投入生产时,您将需要由证书颁发机构签名的证书。

    http://en.wikipedia.org/wiki/Self-signed_certificate

    【讨论】:

      【解决方案3】:

      您必须在浏览器中添加证书例外才能使其正常工作。

      点赞打开这个地址=1390422014472">https://wcc-dev-api.dyndns.info/pubtimeslots/?categoryid=20&=1390422014472
      在您的 chrome 浏览器中单击“继续”。它会给 chrome 浏览器添加一个例外。

      你正在向服务器外部发出一个 json 请求,你必须做 JSONP 才能让它工作

      【讨论】:

        最近更新 更多