如何让Chrome从外部HTTP页面安全访问localhost图片?
问题:Chrome 119+ 无法加载来自localhost的图片(非安全上下文访问本地私有地址空间)
几年前(或几个月前)一切正常,但Chrome 119版本起(具体起始版本记不清),功能失效——Chrome不再对localhost发送Preflight请求。
我试过谷歌和Stack Overflow搜索,只找到未解答或无可行方案的问题,因此明确细节再次提问:
或许你比我更擅长搜索?
来自http://127.0.0.1:8080/的图片请求头:
HTTP/1.1 200 OK content-type: image/png content-length: 3427 server: None access-control-allow-origin: * access-control-allow-private-network: true access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept connection: close
同一URL的OPTIONS请求头:
HTTP/1.1 204 No Content server: None access-control-allow-origin: * access-control-allow-private-network: true access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept connection: close
Chrome报错提示:
Access to image at 'http://127.0.0.1:8080/**REMOVED***' from origin 'http://**REMOVED**.i2p/**REMOVED**' has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space `local`.
核心问题:
是否存在方法能让Chrome再次显示此类图片?
约束条件
- 外部页面可缓存到本地代理以便离线使用(次要需求),外部页面通过HTTP提供,改为HTTPS弊大于利
- 本例基于I2P协议,类似环境需适用;EEPsites不支持HTTPS,因为LetsEncrypt不签发
.i2p域名证书 - 本地和外部服务均不得大幅改动
- 拒绝使用自签名证书的HTTP转HTTPS方案:手动添加证书有安全隐患,不能引导普通用户安装可能被用于MitM攻击的CA证书
已排除的方案
浏览器扩展
第三方CORS扩展(如“Allow CORS”)仅适用于调试开发,不适合日常使用——CORS规则有其合理性,不应为小问题规避规则。
带证书的虚拟域名方案一
通过LetsEncrypt为虚拟域名申请证书,发布供所有人安装到本地服务,再通过本地CONNECT代理拦截HTTPS请求转发,让外部网站看似HTTPS提供服务。
类似某Stack Overflow方案
问题:仅适用于单个网站,或需改写成类似cgiproxy的方式,易出错且易失效。
带证书的虚拟域名方案二
用虚拟域名访问localhost,让localhost看起来来自域名而非127.0.0.1。
问题:
localhost的安全性依赖拦截服务,微小漏洞可能被第三方利用,风险过高- 若将包装器集成到图片服务中,会引入不必要依赖,且方案需适配所有能设置正确CORS头的服务,而非单一服务
该场景还需适配CouchDB等Web数据库或缓存服务
虚拟域名方案通用问题
- 虚拟域名证书私钥需公开(可能导致证书被吊销),且无法本地修改(由LetsEncrypt签名)
绝不允许他人代表我的虚拟域名申请证书(无法保证本地私钥保密性)
- SSL证书需定期更新,引入不必要的虚拟域名依赖,更新失败问题会重现
- 离线超过3个月证书失效,所有功能无法使用,体验极差
需求总结
需要一种可部署、适用于各类工作场景的通用解决方案,而非仅个人使用的临时办法。
内容的提问来源于stack exchange,提问作者Tino
相关产品推荐
相关产品推荐

