摘要:本文针对前端开发中在非 HTTPS 环境下(如 http://192.168.x.x)无法获取麦克风、摄像头等媒体设备权限的问题,深入分析 Chrome 安全策略对非安全上下文的限制,并提供两种实用解决方案:通过 chrome://flags 标记内网 IP 为安全源(永久生效)或改用 localhost 访问(无需配置),快速解决本地开发环境中的音视频权限拦截问题。
问题引出
在Web开发中,特别是在涉及到跨源资源共享(CORS)和内容安全策略(Content Security Policy,CSP)时,有时需要处理不安全的来源(origin),例如将一个不安全的来源(例如 http://)作为安全来源(例如 https://)对待,从而获取麦克风 /摄像头 /定位等权限进行开发测试时。这通常涉及到配置服务器或使用特定的HTTP头来绕过浏览器的安全限制。
图示:通过导航栏左侧点击网页设置进入设置界面禁用置灰

核心原因
Chrome 安全策略:http://192.168.x.x 属于非安全上下文,浏览器直接锁死麦克风/摄像头权限,下拉框强制灰色不可修改,只有 localhost/127.0.0.1、HTTPS 域名默认放行媒体 API。
重启、重置权限都没用,必须走下面两种方案任选其一。
解决方案
方案一:标记内网 IP 为安全源(推荐,永久生效)
浏览器地址栏输入:
plaintext
chrome://flags/#unsafely-treat-insecure-origin-as-secure
在页面中间输入框,完整粘贴你的地址:
右侧下拉框改为 Enabled
页面右下角弹出【Relaunch】按钮,点击重启浏览器
重新打开页面,麦克风下拉框不再灰色,可直接选允许

方案二:改用 localhost 访问(最简单,不用改 flags)
如果环境支持使用本地代理,请优先使用方案二
启动你的 Python 静态服务或nginx代理后,不要用 0.0.0.0 或内网 IP 访问,直接本机打开:
访问地址:http://127.0.0.1:8080 / http://localhost:8080
localhost 浏览器天然认定为安全上下文,权限不会锁死,点开按钮会正常弹出麦克风授权窗口。