跨域
什么是跨域?
跨域问题是由于javascript语言安全限制中的同源策略造成的。同源策略是由Netscape提出的一个著名的安全策略。 现在所有支持JavaScript 的浏览器都会使用这个策略。同源策略阻止从一个域上加载的脚本去获取或操作另一个域上的文档属性。也就是说,受到请求的 URL 的域必须与当前 Web 页面的域相同。这说明浏览器隔离来自不同源的内容,以防止它们之间的操作。所谓同源是指域名,协议,端口均相同。
同源的几种情况:
不同域名属于跨域,如:www.a.com和www.b.com,另外www.a.com 和www.a.com.cn 也属于不同域名。
主域名和子域名(二级域名、三级域名等)跨域,如:www.a.com 和 sub.a.com属于跨域,sub.a.com 和 sub1.a.com 之间也是跨域。
协议属于跨域,如:http://www.a.com 和 https://www.a.com。
不同端口,如: www.a.com:80和 www.a.com:81 。
IP和域名属于跨域,如:123.125.106.16 和www.weibo.com。
为什么要跨越?
我们实际上做项目的时候,不可避免地会根据项目需求进行跨站访问,子域和主域之间数据共享等,受到同源策略的影响,要满足这些需求,就要用跨域技术来实现。
跨域技术
设置头文件:例如:
res.setHeader("Access-Control-Allow-Origin","*");
res.setHeader("Access-Control-Allow-Methods","GET,POST");
服务器代理:在服务器端设置代理文件,用来进行跨域请求,客户端直接发送本域内的Ajax请求,从而达到跨域请求的目的。特点:在客户端不存在跨域请求。需要增加代理文件,为了安全需要和对方约定。
jsonp:jsonp是一个简单高效的跨域方式,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。特点:不受同源策略的限制,兼容性更好,易于实现,只支持get。
网友评论