【发布时间】: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 的网络设备通信的正确方法是什么?
【问题讨论】:
-
在stackoverflow.com/a/69348232/441757 上查看答案。这可能与 Chrome 94 现在强制执行专用网络访问限制有关。见developer.chrome.com/blog/private-network-access-update
-
非常感谢,我会自己添加一个答案,以防有人从 Google 弹出这里。
标签: javascript google-chrome networking web-applications lan