intro

同源策略SOP(Same-Origin-Policy)

1995年,同源政策由 Netscape 公司引入浏览器。目前,所有浏览器都实行这个政策。

最初,它的含义是指,A网页设置的 Cookie,B网页不能打开,除非这两个网页"同源"。所谓"同源"指的是"三个相同"。

这里的源包括:

协议(http/https)

域名(example.com)

端口(80/443)

以example.com举个例子:

URL是否同源原因
http://example.com/test同源协议、域名、端口都相同
http://www.example.com/test非同源域名不同(顶级域名与www子域名不是一个概念)
https://www.example.com/test非同源协议不同
http://www.example.com:81/test非同源端口不同
http://api.example.com/test非同源域名不同

limit

随着互联网的发展,"同源政策"越来越严格。目前,如果非同源,共有三种行为受到限制。

Cookie、LocalStorage 和 IndexDB 无法读取

DOM 无法获得

AJAX 请求不能发送 

Cookie 是服务器写入浏览器的一小段信息,只有同源的网页才能共享。但是,两个网页一级域名相同,只是二级域名不同,浏览器允许通过设置document.domain共享 Cookie。

举例来说,A网页是http://w1.example.com/a.html,B网页是http://w2.example.com/b.html,那么只要设置相同的document.domain,两个网页就可以共享Cookie。

document.domain = 'example.com';

注意,这种方法只适用于 Cookie 和 iframe 窗口,LocalStorage 和 IndexDB 无法通过这种方法,规避同源政策,而要使用下文介绍的PostMessage API。 另外,服务器也可以在设置Cookie的时候,指定Cookie的所属域名为一级域名,比如.example.com

cross-orgin

常见的两种跨域方式

JSONP(JSON with padding)/based on script


CORS(Cross-Origin Resource Sharing)跨域资源共享

JSONP
script标签可以得到从其他来源数据,只能发送Get请求,无法访问服务器的响应文本(单向请求).
一般情况下来说只要有src属性的标签即可,如\

CORS

​Cross-Origin Resource Sharing(CORS)跨域资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,确保安全的跨域数据传输。现代浏览器使用CORS在API容器如XMLHttpRequest来减少HTTP请求的风险来源。与 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Access-Control-Max-Age: 86400

744 对 “SOP”的想法;