同源策略(Same Origin Policy)
概念
一种约定,是浏览器最核心也是最基本的安全功能。保证用户信息的安全,防止恶意的网站窃取数据。
案例
当有两个网站,网站a和网站b。用户登录网站a后,继续浏览网站b,这时网站b可以拿到网站a的cookie信息,就会泄漏用户的相关隐私信息,也有可能被他人非法使用,甚至破环等等。
含义
同源策略需要同时满足以下三点要求:
- 协议相同
- 域名相同
- 端口相同
注:
http:www.panpan.com与https: www.panpan.com 不同源——协议不同
http:www.panpancom与http:www.mm.com 不同源——域名不同
http:www.panpan.com与http:www.panpan.com:8081 不同源——端口不同
只要不满足其中任意一个要求,就不符合同源策略,就会出现“跨域”。
最常见的形式是使用ajax请求数据。
解决方法
postMessage
html5引用了一个跨文档通信的API,这个API为window对象新增了一个window.postMessage方法,允许跨窗口通信,不论这两个窗口是否同源。
注释:该方法只解决了前端两个窗口的通信,但无法解决前后台调用的跨域问题jsonp
网页通过添加一个script元素,向服务器请求json数据,这种方法不受同源策略的限制;服务器收到请求后,将数据放在一个指定的名字回调函数里传回来。
注释:简单好用,服务器改动小CORS
Cross-Origin Resource Sharing 跨资源分享,作为W3C的标准,是跨域ajax的根本解决方法,允许任何类型的请求。
整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。
浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。
同时满足以下两个条件,即为简单请求。
1) 请求方法是以下三种方法之一: HEAD GET POST 2)HTTP的头信息不超出以下几种字段: Accept Accept-Language Content-Language Last-Event-ID Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/ form-data、text/plain