从Chrome 94+与不支持HTTPS的局域网设备进行通信



我们开发了一个web应用程序,通过发送POST请求与连接到同一局域网的打印机通信。

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

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

此解决方案目前在Firefox上运行,但在最新的Chrome版本(>91?)上停止工作。

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

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

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

?

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

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

更新:以下内容是不必要的。经过一番研究,设置"阻止不安全的私有网络请求"显然就足够了。标志为"已禁用";inchrome://flags. 这也适用于OSX, Android, iOS和Linux设备,而不是Windows注册表解决方案。

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

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREPoliciesGoogleChrome]
"InsecurePrivateNetworkRequestsAllowed"=dword:00000001
[HKEY_CURRENT_USERSOFTWAREPoliciesGoogleChrome]
"InsecurePrivateNetworkRequestsAllowed"=dword:00000001
[HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftEdge]
"InsecurePrivateNetworkRequestsAllowed"=dword:00000001
[HKEY_CURRENT_USERSOFTWAREPoliciesMicrosoftEdge]
"InsecurePrivateNetworkRequestsAllowed"=dword:00000001

这将禁用这个新的安全功能,因此请记住它会带来一些安全问题。

为了明确地解决这个问题,我们联系了我们正在通信的设备的制造商,他们将开始销售支持https的外部硬件。我们可以用它来通信,而不必升级整个设备。

如果制造商无能为力,像树莓派这样的东西也可以用于同样的目的。

最新更新