我们开发了一个 Web 应用程序,通过发送 POST 请求与连接到同一 LAN 的打印机进行通信。
此类打印机有一个在端口 80 上打开的服务器,该服务器接受包含命令的 XML。
无法从通过 HTTPS 加载的页面与网络设备进行通信;因此,我们使用了一种解决方法来保持与它的通信:我们打开一个普通的 http:// 弹出窗口,并将其用作代理(使用 postMessage)来代表页面发送请求,从而有效地充当代理。
该解决方案目前适用于 Firefox,但在最新的 Chrome 版本(>91?)上停止工作。
我所说的“停止工作”是指请求错误net::ERR_FAILED
,这只发生在某些设备上 - 例如,我运行 Chrome 94 的 Ubuntu 机器。
我们可以开发一个桌面或移动应用程序,仅仅作为打印机的代理,或者将 Web 应用程序本身作为禁用 CORS 的 Electron 应用程序进行分发,但这两种解决方案对于最终用户来说,与“正常工作”的解决方案相比,听起来非常糟糕和臃肿。 “在每台安装了浏览器的设备上。
总之,2021 年,从 HTTPS 页面与不支持 HTTPS 的网络设备进行通信的正确方法是什么?
根据 @sideshowbarker 的评论,这是由于新的专用接入网络政策 https://developer.chrome.com/blog/private-network-access-update/包含在 Chrome 94 和 Edge Chromium 中。
简而言之,它们限制了网站与本地网络上的设备通信的能力。
UPDATE:以下内容是不必要的。
经过一些研究,这显然足以设置“阻止不安全的专用网络请求”。标记为“已禁用”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 的外部硬件。我们可以与之通信,而无需升级整个设备。
如果制造商无法提供帮助,可以使用树莓派之类的东西来达到同样的目的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)