No Access-Control-Allow-Origin 跨域错误解决

  • 发表于
  • 周边

什么是跨域访问

在A网站中,我们希望使用Ajax来获得B网站中的特定内容。如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题。你可以理解为两个域名之间不能跨过域名来发送请求或者请求数据,否则就是不安全的。跨域访问违反了同源策略,
同源策略规定,浏览器的ajax只能访问跟它的HTML页面同源(相同域名或IP)的资源。

No Access-Control-Allow-Origin 跨域错误解决
跨域

如何确定是跨域请求

  • A域名资源请求到B/C……域名
  • 你当前访问的域名是http的当请求的部分资源是https
  • 当使用ajax访问远程服务器时,请求失败,浏览器报如上错误。这是出于安全的考虑,默认禁止跨域访问导致的。

如果是跨域访问,这时候就会报错

has been blocked by CORS policy: No 'Access-Control-Allow-Origin'

错误场景如:我的WordPress报错:Fonts –No 'Access-Control-Allow-Origin',已经提示我字体文件请求http url跨域了,然后根据我用的服务环境设置如下就行:

跨域访问解决

Apache

Nginx

Access-Control-Allow-Origin:* 表示允许任何域名跨域访问。

扩展

你还可以动态配置跨域方案

不改动服务配置跨域解决

如果需要指定某域名才允许跨域访问,只需把Access-Control-Allow-Origin:*改为Access-Control-Allow-Origin:允许的域名,例如:

如果需要设置多个域名允许访问,那么把多个域名放在数组中就可以,例如:

至此,No 'Access-Control-Allow-Origin'问题解决!

扩展

Nginx的跨域Content Security Policy通行设置