Nginx默认是禁止跨域操作,可能说到跨域好多伙伴会有点迷糊,什么叫跨域?为什么不能跨域呢? 看下面小编的详解。
url
|
说明 |
是否跨域 |
http://www.cnblogs.com/a.js
http://www.a.com/b.js
|
不同域名
|
是 |
http://www.a.com/lab/a.js
http://www.a.com/script/b.js
|
同一域名下不同文件夹 |
否 |
http://www.a.com:8000/a.js
http://www.a.com/b.js
|
同一域名,不同端口 |
是 |
http://www.a.com/a.js
https://www.a.com/b.js
|
同一域名,不同协议 |
是 |
http://www.a.com/a.js
http://70.32.92.74/b.js
|
域名和域名对应ip |
是 |
http://www.a.com/a.js
http://script.a.com/b.js
|
主域相同,子域不同 |
是(cookie不可访问) |
http://www.a.com/a.js
http://a.com/b.js
|
同一域名,不同二级域名(同上) |
是 |
禁止跨域的原因是这样可以更安全,据小编了解假如浏览器记录了a.com的网站上的cookie,拿到了b.com的网站的进行了验证这样就存在了安全风险。小编这块对安全的需求不是了解特别透彻有必要加强。
解决方案:
因为nginx默认是禁止跨域访问的,所有当跨域请求数据的时候拿不到相应的数据,特别是字体。
生产环境介绍:
访问www.a.com的时候,需要调用www.b.com下的css、js、image、字体等,因为设计到跨域,所以nginx拒绝了我的字体的请求,所以在www.b.com下面的server中加了一个location即可。
1
2
3
4
|
location ~* \.(eot|ttf|woff|svg|otf|woff2)$ {
add_header Access-Control-Allow-Origin *;
}
|
生产环境遇到的问题用上述方法解决了,下面说说如何允许跨域:
在需要允许跨域的server中下面加上下面三句代码即可:
1
2
3
4
5
6
7
8
9
|
add_header 'Access-Control-Allow-Origin' '*' ;
add_header 'Access-Control-Allow-Credentials' 'true' ;
add_header 'Access-Control-Allow-Methods' '*' ;
|
本文转自 xinsir999 51CTO博客,原文链接:http://blog.51cto.com/xinsir/1953251,如需转载请自行联系原作者