问题描述
因项目需要,我们调用了一个外部接口,但是接口报错 CORS Error
- 接口报错:CORS Error
- 控制台报错:
问题成因
Access to XMLHttpRequest at 'https:XXXXXXXX' from origin 'http:XXXXXX' 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策略阻止:请求客户端不是一个安全的上下文,并且资源位于更私有的地址空间私有中。可以理解为,不安全的请求方请求了更私有的本地资源。
简单理解就是:在使用http协议的系统里,调用了使用https协议的接口
拓展:
- CORS:跨资源分享,是一种允许服务器放宽同源策略的标准
如何解决
1 调整chorme浏览器的设置
- 地址栏输入: chrome://flags/
- 搜索框输入:block insecure
- 修改配置项 Block insecure private network requests 的值为 Disabled
- 重启浏览器
这个方案的问题点:
- 不能要求每位用户都这么修改
- 几个主流浏览器,已经在陆陆续续的关闭了这个功能
2 将系统的协议升级为 HTTPS
意外得知,我们的系统是早就升级了https,只需要用https重新登录系统就可以了。
最好的解决方式当然是升级“安全的上下文”。同时对于https的升级,还有以下几种情况:
- http网站访问私有ip服务端,需要客户端和服务端都升级为https协议。
- http网站访问本地,即
http://localhost,服务器可以配置TLS升级https,但是如果是本地服务,难道每个电脑都要单独配置个https服务器吗?并不,这种情况只需要升级网站为https即可。
其它解决方案请参考博客:谷歌新版本跨域错误深度剖析与解决:request client is not a secure context and the resource is in more-private address