首页 > 解决方案 > 从 Chrome 94+ 与不支持来自 Web 应用程序的 HTTPS 的 LAN 设备通信

问题描述

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

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

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

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

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

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

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

标签: javascriptgoogle-chromenetworkingweb-applicationslan

解决方案


根据@sideshowbarker 的评论,这是由于Chrome 94 和 Edge Chromium 中包含新的专用访问网络策略。

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

更新: 以下不是必需的。经过一番研究,显然设置“阻止不安全的专用网络请求”就足够了。标记为“已禁用”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 之类的东西用于相同目的。


推荐阅读