Chrome 94+版本HTTPS网页如何与无HTTPS支持的局域网设备通信
Chrome 91及以上版本失效的核心原因是2021年正式落地的*私有网络访问规范(Private Network Access,原名CORS-RFC1918)*与混合内容限制升级:浏览器默认禁止公共HTTPS页面发起未授权的私有网络(局域网、本地)HTTP请求,你此前采用的HTTP弹窗代理方案也被纳入了该限制范围,因此出现net::ERR_FAILED报错。
以下是2021年对应的标准实现方案,按适用场景排序:
方案1:适配私有网络访问规范(优先选择)
如果可以修改打印机的80端口服务配置,直接按规范配置响应头即可实现无感知访问,无需终端用户做任何操作:
- 打印机服务针对收到的OPTIONS预检请求,返回以下响应头:
Access-Control-Allow-Origin: 你的Web应用完整域名 Access-Control-Allow-Methods: POST, OPTIONS Access-Control-Allow-Headers: Content-Type Access-Control-Allow-Private-Network: true - 你的Web应用向打印机发起请求时,在请求头中添加
Access-Control-Request-Private-Network: true
该方案完全符合W3C标准,所有2021年之后发布的主流浏览器都原生支持。
方案2:配置浏览器豁免规则(适合固定用户群体的内部场景)
如果无法修改打印机配置,且使用用户群体固定(比如企业内部员工),可以让用户手动配置浏览器跳过限制,操作方式如下:
- 方案A(全版本通用):打开Chrome设置->安全和隐私->安全,找到「不安全内容」选项,将你的Web应用域名添加到允许列表中
- 方案B(适合技术用户):地址栏输入
chrome://flags/#unsafely-treat-insecure-origin-as-secure,将你的Web应用域名填入输入框,启用该Flag后重启浏览器即可
方案3:轻量局域网代理中转(适合公网面向普通用户的场景)
如果既无法修改打印机配置,又不想让用户手动调整浏览器设置,可以开发一个单文件轻量代理程序,体积可控制在1MB以内,远小于Electron应用和专用客户端:
- 代理程序仅做两件事:监听局域网HTTPS端口,转发请求到打印机的80端口,同时补充PNA要求的CORS响应头
- 你可以将代理程序放在Web应用上供用户下载,用户仅需双击运行一次即可正常使用,资源占用可忽略不计
内容的提问来源于stack exchange,提问作者Hissvard
相关产品推荐
相关产品推荐

