【HTTP】CORS Error

333 阅读2分钟

问题描述

因项目需要,我们调用了一个外部接口,但是接口报错 CORS Error

  • 接口报错:CORS Error
  • 控制台报错: image.png

问题成因

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
  • 重启浏览器

image.png

这个方案的问题点:

  • 不能要求每位用户都这么修改
  • 几个主流浏览器,已经在陆陆续续的关闭了这个功能

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

资料来源