1.什么是跨域
定义:一个域下的文档或脚本试图去请求另一个域下的资源
资源跳转:A链接、重定向、表单提交
资源嵌入:、等dom标签
脚本请求:js发起的ajax请求
2.什么是同源策略
“协议+域名+端口”三者相同,即便两个不同的域名指向同一个ip地址,也非同源
URL | 说明 | 是否允许通信 |
---|---|---|
http://www.domain.com/a.js | 允许 | |
http://www.domain.com/b.js | 同一域名,不同文件或路径 | 允许 |
http://www.domain.com/lab/c.js | ||
http://www.domain.com:8000/a.js | ||
http://www.domain.com/b.js | 同一域名,不同端口 | 不允许 |
http://www.domain.com/a.js | ||
https://www.domain.com/b.js | 同一域名,不同协议 | 不允许 |
http://www.domain.com/a.js | ||
http://192.168.4.12/b.js | 域名和域名对应相同ip | 不允许 |
http://www.domain.com/a.js | ||
http://x.domain.com/b.js | 主域相同,子域不同 | 不允许 |
http://domain.com/c.js | ||
http://www.domain1.com/a.js | ||
http://www.domain2.com/b.js | 不同域名 | 不允许 |
3.跨域解决方案
1、 通过jsonp跨域
2、 document.domain + iframe跨域
3、 location.hash + iframe
4、 window.name + iframe跨域
5、 postMessage跨域
6、 跨域资源共享(CORS)
7、 nginx代理跨域
8、 nodejs中间件代理跨域
9、 WebSocket协议跨域
https://segmentfault.com/a/1190000011145364