从 Chrome 94+ 与不支持 HTTPS 的 LAN 设备通过网络应用程序进行通信

2024-02-21

我们开发了一个 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(使用前将#替换为@)

从 Chrome 94+ 与不支持 HTTPS 的 LAN 设备通过网络应用程序进行通信 的相关文章

  • 如何按多个项目搜索/过滤列表?

    我正在寻找一个示例 或者可能是一个关于通过在文本框中输入的多个项目来过滤 搜索项目列表的方法的一点提示 假设我有一个列表 ul li Coffee li li Tea li li Milk li li Water li li Juice l
  • 如何设置上传的文件名?

    By using multer I made it to request image file like this 这个文件存储在我设置的 上传 文件夹中 我的代码如下 var multer require multer var uploa
  • 为什么隐式符号到字符串转换会导致 JavaScript 中出现类型错误?

    有一个 toString on Symbol在 ES6 中 它返回字符串表示形式Symbol 但想知道为什么 Symbol 不起作用 运行这个表达式会抛出TypeError我没想到 后者只是打电话吗 toString 在一个新的Symbol
  • 如何强制折断不可折断的字符串?

    我有一个根据数据库中包含的数据生成的 HTML 页面 数据库有时包含浏览器无法分解的长字符串 因为这些字符串不包含可分解的字符 空格 点 逗号等 有没有办法使用 html css 甚至 javascript 来解决这个问题 看到这个link
  • 在 setInterval / setTimeout 中使用变量作为时间[重复]

    这个问题在这里已经有答案了 这是一个示例情况 var count time 1000 setInterval function count 1 time 上面的代码会将 count 变量加 1 即 1000 毫秒 看来 setInterva
  • React 应用程序中的 addEventListener 不起作用

    一些背景 我正在尝试消费自定义网络组件在 React 应用程序中并尝试监听来自 Web 组件的事件 我相信您不能只在自定义 Web 组件上以通常的反应方式处理事件 i e
  • window.open:是否可以打开一个新窗口并修改其 DOM

    我想打开一个新窗口 var my window open iframe html blank height 600 width 600 但当我打开它时 我想修改它的DOM 我尝试过 var div my document createEle
  • 窗口大小调整触发的 DOM 事件

    我有一个布局相当复杂的页面 最初打开页面时 某些元素的对齐存在问题 但是 可以通过更改浏览器窗口的大小来 永久 解决此问题 显然 我不希望用户必须调整浏览器窗口的大小才能使页面正确显示 所以我想知道是否有一种方法可以在页面首次加载时以编程方
  • ReactCSSTransitionGroup 组件WillLeave 未调用

    我尝试使用 ReactCssTransition 但不知何故该事件没有被调用 componentWillLeave 这是我的组件 import React Component from react import TransitionGrou
  • 带有 mkdocs 的本地 mathjax

    我想在无法访问互联网的计算机上使用 MathJax 和 Mkdocs 因此我不能只调用 Mathjax CDN Config mkdocs yml site name My Docs extra javascript javascripts
  • put方法中的Angularjs文件上传不起作用

    我有一个简单的待办事项应用程序 我试图在其中上传照片和单个待办事项 现在我已经创建了这个工厂函数来负责待办事项的创建 todosFactory insertTodo function todo return http post baseUr
  • @aspnet/signalr 与 @microsoft/signalr javascript 库

    aspnet signalr 与 microsoft signalr javascript 库有什么区别 两者似乎都对 DotNetCore SignalR 有效 两者似乎都很活跃 在一些教程中 我找到 aspnet signalr 在Do
  • 根据特定字符获取整个字符串或子字符串

    我有一个包含 MIME 类型的字符串 例如application json 现在我想将其与实际的 HTTP 标头进行比较 在本例中content type 如果标头包含 MIME 类型 那么就很简单 if mimeType contentT
  • 使用 AJAX 和 JQuery 按设定的时间间隔刷新 Rails 部分

    I have a page in my rails application that looks like 现在 我有另一个用 python 编码的人工智能应用程序 它处理视频 显示在 Rails 应用程序页面的左侧 并使用捕获的车辆及其相
  • Javascript 中 if 语句中的假值?

    过去两周 我在学校研究 JavaScript 的事情已经有一段时间了 而且我一直在做我的作业 在 Douglas Crockford 所著的 JavaScript The Good Parts 一书中 作者在第 11 页上列出了 if 语句
  • 检测浏览器选项卡是否具有焦点

    是否有可靠的跨浏览器方法来检测选项卡是否具有焦点 场景是 我们有一个定期轮询股票价格的应用程序 如果页面没有焦点 我们可以停止轮询并为每个人节省流量噪音 特别是当人们喜欢打开具有不同投资组合的多个选项卡时 Is window onblur
  • p5 向量减法“sub”返回错误

    我一直在尝试将 p5 草图上传到 React 构建中 使用react p5 wrapper 我能够成功在屏幕上渲染画布 但是 某些矢量函数会导致错误 var distance this position dist ball position
  • DOM 解析器 Chrome 扩展内存泄漏

    问题 我开发了一个扩展程序 可以拦截 Web 请求 获取 Web 请求来源的 HTML 并对其进行处理 我使用 DOMParser 来解析 HTML 并且意识到 DOMParser 正在导致大量内存泄漏问题 最终导致 chrome 扩展崩溃
  • 如何获得 JavaScript 阶乘程序的循环来显示所使用的工作?

    你好 我面临着用 JavaScript 编写一个程序的挑战 尽管我对它不太了解 但它要求用户输入一个数字 然后计算该数字的阶乘 我使用了已经提出的问题并设法使计算正常工作 但无法获得所需的输出 我必须在以下输出中获取它 而不使用任何花哨的库
  • 用javascript调用外部网页(跨域)

    我正在尝试使用以下网络服务来验证提要这个问题 https stackoverflow com questions 11996430 check if a url is a valid feed 但浏览器不允许我向另一台服务器发送 ajax

随机推荐

  • 更改部分图像来源

    我想问问题是否有可能使用 jQuery 来更改图像源的一部分 HTML 代码很简单 img src numbers gray 1 png alt green width 44 height 46 img src numbers gray 5
  • 如何设置搜查排序的默认值?

    简而言之 我只是想知道是否有办法使用 Ransack gem 设置排序功能的默认值 ie 目前 页面加载时我有以下内容 但相反 我想要以下内容defaults当页面加载时 是否可以通过正确配置 Ransack Gem 来做到这一点 一如既往
  • 学说关系是否会影响应用程序性能?

    我正在与一个新团队一起开发 Symfony 项目 由于性能问题 他们决定尽可能停止使用 Doctrine 关系 例如 我必须存储我的 关系 的 id 而不是使用 ManyToOne 关系 但我想知道这是否是一个真正的问题 问题是 它改变了检
  • 在 PHP 中导入命名空间与包含文件

    我从 PHP 4 开始构建我的代码库 我使用过require once导入类 现在 在 PHP 5 3 中 我已经定义了名称空间并导入它们 我想更改我的源文件以使用导入 use声明 而不是使用require once 我不确定这是正确的决定
  • 如何使用自定义上传表单将文件上传到 WordPress?

    我不想使用 Wordpress 的内置媒体上传器 我的网站有一个表单 在前端 我需要允许任何人将图像上传到 wp content 中的我的上传文件夹 我找到了很多教程 但它们都告诉我如何使用 WordPress 上传器来做到这一点 我需要能
  • matlab:如何使用数组为绘图着色

    我有一组 3d 坐标 分为 3 个数组X Y Z 和温度T在每个点 我想将这些点绘制为点云 这样每个点都会根据其温度具有颜色 类似于您可以在中指定颜色的方式trisurf 我怎么做 您可以使用SCATTER3 http www mathwo
  • 如何判断 div 是否有高度限制?

    我想知道使用jquery div 是否有高度限制 例如 这个 div 被限制为 100px 无论内容的大小如何 div 的高度都将是 100px div style height 100px bla bla div 并且这个不受限制并且将占
  • Pyinstaller:警告:找不到库

    我正在尝试从使用 PyQt5 的代码创建一个可执行文件 我使用Python 3 5 3 64位 在Windows 10中开发 使用pip安装pyinstaller 3 2 1 并安装pywin32 Pyinstaller 运行但输出未找到库
  • 如何解决 Blazor Server 默认项目解决方案中的命名空间错误(Visual Studio 代码)

    我使用 vs code 创建了多个新的 BlazorServer 项目dotnet new blazorserver在多台电脑上 我总是收到此错误 The type or namespace name Shared does not exi
  • WPF 应用程序将数据表写入 Excel 的更有效方法?

    In my WPF应用程序 我有一个巨大的数据表 System Data DataTable 我需要写入 Excel 文档中的工作表 这是该函数的重点部分 for i lt dt Rows Count i for int colNum 0
  • 为arm64 iOS构建C库(GMP)

    我正在尝试为arm64 构建一个C 库 GMP 6 0 0 以在iOS 上使用 我正在使用下面的调用运行配置脚本 编译器是使用 xcrun find 找到的 configure CC Applications Xcode app Conte
  • Java 11之后wsimport在哪里

    我已经使用 wsimport 和其他 Metro 工具很多年了 但自从 Java 11 中删除了 Java EE 模块后 我找不到这些工具了 我在哪里可以找到wsimport可执行的 WSIMPORT 的可执行文件可以在主站点找到https
  • 如何以编程方式创建新的密钥库?

    我正在尝试以编程方式在 Java 中创建一个新的密钥库 以下代码 KeyStore keyStore KeyStore getInstance KeyStore getDefaultType keyStore setCertificateE
  • 如何在Python中找到两个字符串之间的最长交集?

    我正在尝试编写一个程序来找到两个字符串之间最长的交集 条件是 如果没有公共字符 程序将返回一个空链 如果有多个相同长度的公共字符子串 则应返回最大的一个 例如 对于 bbaacc 和 aabb 重复子串是 aa 和 bb 但 bb gt a
  • Mock 框架与 MS Fakes 框架

    对 NMock 等 Mock 框架与 VS 2011 Fakes 框架的差异有点困惑 通过MSDN 我了解到Fakes允许您像RhinoMock或NMock一样模拟您的依赖项 但是方法不同 Fakes生成代码来实现此功能 但Mocks框架不
  • 选定的文本背景颜色

    当我使用任何网站时 我看到选定的文本背景颜色显示蓝色或根据我们的操作系统主题 我可以更改此选定的文本背景颜色吗 您可以使用这种风格 这适用于除 IE 之外的所有主要浏览器
  • Python 3.3 无法导入 Crypt

    当我在命令行中输入 import Crypt 时 它会显示 gt gt gt import crypt Traceback most recent call last File
  • 如何编写正则表达式“行”包含字符串[重复]

    这个问题在这里已经有答案了 我有字符串 one line second line magic line foo third line 如何仅使用关键字将整行与 foo 匹配foo 所以 我可以匹配foo using foo g 但我不知道如
  • 如何在运行时获取测试环境

    我想检查代码是否正在运行go test 这样我就可以进行一些配置 有什么功能可以做到这一点吗 喜欢 运行时 IsBeingTested 只需指定您在 test 中运行测试init 例如 在 pkg go 中 package pkg var
  • 从 Chrome 94+ 与不支持 HTTPS 的 LAN 设备通过网络应用程序进行通信

    我们开发了一个 Web 应用程序 通过发送 POST 请求与连接到同一 LAN 的打印机进行通信 此类打印机有一个在端口 80 上打开的服务器 该服务器接受包含命令的 XML 无法从通过 HTTPS 加载的页面与网络设备进行通信 因此 我们