【问题标题】:Communicating from Chrome 94+ with LAN devices that do not support HTTPS from a web app从 Chrome 94+ 与不支持来自 Web 应用程序的 HTTPS 的 LAN 设备通信
【发布时间】:2021-11-19 11:11:17
【问题描述】:

我们开发了一个 Web 应用程序,它通过发送 POST 请求与连接到同一 LAN 的打印机进行通信。

这种打印机在端口 80 上打开了一个服务器,该服务器接收包含命令的 XML。

无法从通过 HTTPS 加载的页面与网络设备进行通信;因此,我们使用了一种解决方法来保持与它的通信:我们打开一个普通的 http:// 弹出窗口并将其用作代理(使用 postMessage)以代表页面发送请求,从而有效地充当代理。

此解决方案目前适用于 Firefox,但已停止适用于最新的 Chrome 版本 (>91?)。

“停止工作”是指net::ERR_FAILED 发出的请求错误,这只发生在某些设备上 - 例如,我运行 Chrome 94 的 Ubuntu 机器。

我们可以开发一个桌面或移动应用程序,仅作为打印机的代理,或者将 Web 应用程序本身作为禁用 CORS 的 Electron 应用程序分发,但与最终用户相比,这两种解决方案听起来都非常糟糕和臃肿。在每台安装了浏览器的设备上“正常工作”。

总之,在 2021 年,从 HTTPS 页面与不支持 HTTPS 的网络设备通信的正确方法是什么

【问题讨论】:

标签: javascript google-chrome networking web-applications lan


【解决方案1】:

根据@sideshowbarker 的评论,这是由于Chrome 94 和Edge Chromium 中包含the new Private Access Network policies

简单地说,它们限制了网站与本地网络上的设备进行通信的能力。

更新: 以下不是必需的。 经过一番研究,显然设置“阻止不安全的专用网络请求”就足够了。在chrome://flags 中标记为“已禁用”。这也适用于 OSX、Android、iOS 和 Linux 设备,而不是 Windows 注册表解决方法。

下面是以前的解决方案。

我们的大多数客户都使用 Windows,因此作为临时解决方法,我们使用一个简单的 .reg 文件禁用了新限制,他们可以双击并应用:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome]
"InsecurePrivateNetworkRequestsAllowed"=dword:00000001

[HKEY_CURRENT_USER\SOFTWARE\Policies\Google\Chrome]
"InsecurePrivateNetworkRequestsAllowed"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge]
"InsecurePrivateNetworkRequestsAllowed"=dword:00000001

[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Edge]
"InsecurePrivateNetworkRequestsAllowed"=dword:00000001

这会禁用这项新的安全功能,因此请注意它会带来一些安全问题。

为了以明确的方式解决问题,我们联系了我们正在与之通信的设备的制造商,他们将开始销售支持 https 的外部硬件。我们可以与之通信,而无需升级整个设备。

如果制造商无法提供帮助,可以使用 Raspberry Pi 之类的东西来达到同样的目的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 2021-01-24
    • 1970-01-01
    • 2015-03-11
    • 2012-02-01
    • 2011-08-17
    相关资源
    最近更新 更多