Nginx允许跨域和禁止跨域操作

Nginx允许跨域和禁止跨域操作

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即可。

# 由于字体使用跨域的方式进行的调用,默认浏览器拒绝访问,加上这个location就可以在其他域名下访问这个域名的字体了    location ~* .(eot|ttf|woff|svg|otf|woff2)$ {             add_header Access-Control-Allow-Origin *;    }

生产环境遇到的问题用上述方法解决了,下面说说如何允许跨域:

在需要允许跨域的server中下面加上下面三句代码即可:

# 该字段是必须的。它的值要么是请求时Origin字段的值,要么是一个*,表示接受任意域名的请求。add_header 'Access-Control-Allow-Origin' '*';# 该字段可选。它的值是一个布尔值,表示是否允许发送Cookie。#  默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,#  Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true,#  如果服务器不要浏览器发送Cookie,删除该字段即可add_header 'Access-Control-Allow-Credentials' 'true';# 该字段是必须的,用来列出浏览器的CORS请求会用到哪些HTTP方法,上例是PUT。add_header 'Access-Control-Allow-Methods' '*';

参考文档:http://www.ruanyifeng.com/blog/2016/04/cors.html

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部