同源策略
同源策略(Same origin policy)是浏览器最核心也最基础的安全功能,同源策略会阻止一个域的 javascript 脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol)、主机(host)和端口号(port)
为什么浏览器不支持跨域
- 无法读取非同源网页的 Cookie、LocalStorage 和 IndexedDB
- 无法接触非同源网页的 DOM
- 无法向非同源地址发送ajax
实现跨域的方案
所有实现跨域方案demo 以提交至github,有需要可以查看
- jsonp
JSONP
由于采用script
资源文件请求,而资源请求为GET
请求,故仅在GET
请求中使用JSONP
跨域请求。使用ajax
请求网站,而服务器返回的JSONP
callback
是恶意执行代码,导致返回浏览器后会自动执行恶意代码,威胁数据安全。(XSS
攻击) - cors
若携带凭证发起请求,CORS
只能指定一个允许源,不能使用通配符和指定多个源。 - postMessage
- document.domain
在根域范围内,浏览器允许把domain
属性的值设置为它的上一级域。例如,在a.test.com
域内,可以把domain
设置为test.com
。16
所以document.domain
只能处理父域相同,子域不同的情况。 - window.name
- location.hash
- http-proxy
- nginx
- websocket