1. 问题来了:为什么我的海康视频突然播不了了?
最近好几个做安防监控项目的朋友都跑来问我同一个问题:“哥,我们那个Web系统里的海康视频插件,之前好好的,怎么突然就黑屏了?用户那边也大面积反馈看不了实时监控了。” 一开始我还以为是他们服务器挂了或者网络问题,结果一排查,发现大家的浏览器版本都悄咪咪地升级到了Chrome 94。问题就出在这儿。
我自己也实测了一下,用Chrome 94打开一个集成了海康Web插件的后台管理页面,果然,视频区域一片漆黑,控制台里赫然躺着一行刺眼的红色错误:
Access to XMLHttpRequest at 'http://192.168.1.100:8000/api/stream' from origin 'https://your-domain.com/' has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space `private`.
这错误信息看着挺唬人,又是CORS(跨源资源共享)策略,又是什么“非安全上下文”、“更私有的地址空间”。简单来说,就是浏览器觉得你这个请求“不安全”,给拦截了。很多开发者一看到CORS,第一反应就是去折腾后端服务器的响应头,拼命加 Access-Control-Allow-Origin: *,但这次,你就算把后端配置出花来,也解决不了问题。因为问题的根源不在后端,而在浏览器本身一个默认开启的新安全策略。
这个策略的名字就叫 “Block insecure private network requests”。从Chrome 94开始,它被默认设置为 “Enabled” 了。这个策略的设计初衷是好的,是为了防止恶意网站利用你的内部网络(比如公司内网、家庭路由器管理界面)发起攻击,提升安全性。但对于我们这些需要从公网(HTTPS)页面去访问内网(HTTP)海康摄像头视频流的应用来说,这就成了一道“误伤”的防火墙。
所以,如果你也遇到了同样的问题,先别急着骂插件或者改代码,很可能就是Chrome 94这个新特性在“作祟”。接下来,我们就把它掰开揉碎了讲清楚。
2. 刨根问底:Chrome 94的CORS策略到底变了什么?
要解决问题,不能光知道“怎么关掉它”,还得明白“它到底是什么”。这样以后遇到类似问题,你才能举一反三。
2.1 什么是“不安全的私有网络请求”?
我们可以用一个生活化的场景来理解。假设你家的智能门锁(内网设备,比如海康摄像头)只支持用对讲机(HTTP协议)通话,而你的手机(浏览器)安装了一个社区安保App(HTTPS网站)。以前,这个App可以直接用对讲机频道呼叫你的门锁,查看门口情况。
但Chrome 94更新后,社区安保App(运行在安全的HTTPS环境下)再想用不加密的对讲机(HTTP)去呼叫一个位于你家庭内部网络(私有IP地址,如192.168.x.x)的设备时,手机系统(浏览器)就会发出警告:“等等!你正在用一个安全App,去访问一个不安全的内部设备,这可能有风险(比如有人伪装成门锁)。” 于是,系统默认就把这个呼叫给拦截了。
翻译成技术语言,核心限制在于:
- 安全上下文(Secure Context):你的网页是通过HTTPS加载的,或者是在
localhost本地环境。 - 私有网络地址(Private Network):你请求的目标地址是一个私有IP段内的资源。这些IP段是保留给内部网络使用的,比如: <

6万+

被折叠的 条评论
为什么被折叠?



