对不受信任(自签名)HTTPS 的 AJAX 调用会默默失败

2024-04-05

我想对使用自签名证书的安全服务器进行 AJAX 调用。在使用我的应用程序的环境中,这很好——我可以向用户提供 CA 证书并让他们在使用应用程序之前安装它。但是,有时,用户会在安装证书之前尝试访问该应用程序。在这些情况下,应用程序会默默地失败——至少在 Firefox 中(最常见的问题情况),看起来调用会默默地终止,甚至没有触发错误处理程序。 FWIW,如果用户访问实际的page在服务器上,他们收到证书警告。

我可以破解一个解决方法 - 例如,发出心跳/ping 请求并设置一个看门狗计时器来查看服务器是否及时响应 - 但这看起来很糟糕。我希望能够提前测试连接。确保您想要交谈的服务器拥有来自 Javascript 的可信证书的“正确”方法是什么?如果有什么区别的话,我将通过 JQuery 执行 AJAX 请求。

更新:这里有一个很棒的妙语。事实证明,AJAX 根本不是问题所在。根据症状,我确信它与自签名证书有关,但缺乏 AJAX 错误令人不安,尤其是。给出下面答案中链接的规范。另一位团队成员解决了这个问题:AJAX 错误处理程序没有启动,因为JQuery 从未加载过!我们包含了来自我们网站的另一个子域的 JQuery,该子域也托管在 HTTPS 上 - 用户为 ourService.example.com 添加了例外,但没有为 js.example.com 添加了例外。显然如果你指向一个<script>在不可信的安全连接上标记,that也默默地失败。

{/服务台}


XMLHttpRequest(AJAX 请求)仅允许在同源服务器上使用。这意味着目标URL 的scheme://host:port 部分必须与当前文档的scheme://host:port 部分匹配。根据规范,您甚至不应该被允许从非 SSL URL 向 SSL URL 发出请求。

我看到的不太黑客的解决方案是,您只需将所有用户强制重定向到 SSL 站点。这样,他们将被迫在发出任何 AJAX 请求之前看到证书警告。

注意:规范还规定,如果 TLS 握手失败(我认为这种情况在某种程度上属于这种情况),它应该抛出 NETWORK_ERR (代码 19)异常。您可以尝试在发起 AJAX 请求时捕获异常。参考the spec http://www.w3.org/TR/XMLHttpRequest/#request-error有关错误处理的更多详细信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对不受信任(自签名)HTTPS 的 AJAX 调用会默默失败 的相关文章

  • Angularjs : $locationProvider.hashPrefix("!") ;

    我想将网址显示为 www test com 因为我正在使用 locationProvider hashPrefix 但它显示网址为 www test com 我想 哈希之前而不是哈希之后 Thanks var app angular mod
  • 如果选中复选框则显示 div

    我正在尝试构建类似 WordPress 选项的东西 用于在创建文章时切换字段可见性 我所构建的依赖于 click函数使用相应的字段名称切换父项 我想知道如果选中该复选框 执行此操作的最佳方法是什么 因为如果您选中一个框并重新加载页面 因为它
  • Select2 有 10.000 多个元素时打开速度很慢

    我正在使用 Select2 来填充下拉菜单 Select2如果底层选择有相当数量的项目 则打开下拉菜单时会很慢 我的下拉列表中有超过 10 000 个元素 这是我的代码 ajax url Companies GetCompanies met
  • javascript setInterval 不适用于对象

    所以 我正在尝试创建一个 javascript 对象 并使用 setInterval 方法 这似乎不起作用 如果我删除引号 则该方法将运行一次 有什么想法吗 另外 我正在使用 Jquery Yacoby 和
  • 选中复选框时如何向文本区域添加值

    我正在使用我刚刚在 SO 上找到的以下函数 该函数可以解决我的问题 只有一个问题是 我有一长串选择列表 当用户选中超过 3 4 个复选框时 某些文本或添加到文本区域的值不再可见 有没有什么方法可以让每次选中一个框时添加到文本区域的文本始终可
  • init 后用 JSON 填充 select2 不起作用

    我正在尝试使用 JSON 数组填充 select2 元素 但我无法得到它 我有下一个数组 data id Foo text Foo id Bar text Bar 我初始化 select2 如下 selectElement select2
  • 使用 jquery 单击或更改广播上的事件

    我的页面中有一些收音机 我想在检查的收音机发生变化时执行一些操作 但是代码在 IE 中不起作用 input radio change 在谷歌搜索后 人们建议使用click反而 但这不起作用 这是示例代码
  • 动态突出显示时向

    添加项目符号点?

    Update 例子 p Text Text p 在示例中 是否可以选择第二个 文本 单词 p 元素并单击按钮仅动态添加项目符号点到选定的 单词 有没有可能 在一个 p p Text p 突出显示从 p 元素并添加项目符号点到按钮上动态单击的
  • ASP.Net MVC AJAX 链接不起作用

    为了实现 AJAX 登录 我在我的页面上有这个链接 附近有一个 id 为 lll 的 div 当我单击该链接时 我得到了无聊的确认 只是出于调试目的而添加 没有它的行为是相同的 但然后什么也没有发生 没有请求到达服务器 因为我在 LogOn
  • 具有 yaxis max 属性的 Highcharts 不会隐藏绘图带和标签

    我创建了两个 jsfiddle 来演示我的问题 第一个 jsfiddle 是我需要的 第二个 jsfiddle 是我遇到的问题 这个jsfiddle https jsfiddle net n5ua6krj 1 https jsfiddle
  • 获取自定义属性的值

    我有两个单选按钮 我希望能够获取选中的单选按钮的自定义属性 xml value 的值 我尝试过以下脚本 var userType input name ctrl CustomerType checked this attr xmlvalue
  • jquery 调整窗口大小以适合内容

    我有一个简单的弹出窗口显示300x300px图片 我将窗口的大小设置为350x350px 但根据浏览器的不同 我要么得到滚动条 要么得到额外的空白 是否有一些 jQuery 函数可以调整浏览器窗口的大小以适应内容 而无需任何滚动条或空白 无
  • 使用 setAttribute() 添加“onclick”函数

    为什么以下不起作用 显然该功能尚未添加 function activatetypeinput event devtype The function is called but it doesn t set the attribute var
  • 创建后将事件处理程序添加到 jQuery UI 日期选择器

    我有以下场景 在我的母版页中我有 datepicker datepicker changeYear true changeMonth true dateFormat dd mm yy duration fast 这样 我分配 datepic
  • 了解 sort() 比较函数

    我正在使用一个电子商务平台 该平台无法重新排序产品属性字段的选项 这真的很糟糕 因为要插入新选项 您几乎必须删除所有现有选项并重新开始 我正在尝试在客户端进行操作 这是我正在处理的内容 这是针对鞋码的 9 EE 9 1 2 EE 10 EE
  • 如何使用 javascript/jquery/AJAX 调用 Django REST API?

    我想使用 Javascript jQuery AJAX 在前端调用 Django Rest API 请求方法是 POST 但当我看到 API 调用它的调用 OPTIONS 方法时 所以 我开始了解access control allow o
  • Jquery 在 DIV 中进行多重加载

    这是我的代码 right load textes html nicolas right load textes html antoine 问题是内容divantoine覆盖了右边div nicolas加载的内容div div right l
  • 使用日期字符串数组在引导日期选择器中设置禁用月份不起作用

    我有一个日期选择器 其配置如下 HTML div class input group date div
  • 将 HTML 表格导出到 Excel

    我在 ASP NET MVC 视图页面上有 HTML 表 现在我必须将该表导出到 Excel 1 我使用部分视图 Inquiries ascx 来显示数据库中的表数据 使用LINQ to Entity 2 我还使用了 UITableFilt
  • 无法使用 HTML 设置未定义 jQuery UI 自动完成的属性“_renderItem”

    我使用以下代码将 jQuery UI 自动完成项呈现为 HTML 这些项目在自动完成控件中正确呈现 但我不断收到此 JavaScript 错误并且无法移动过去 Firefox 无法转换 JavaScript 参数 Chrome 无法设置未定

随机推荐