跨域:即请求的地址与被请求的地址协议头、域名、端口有一个不一样就叫跨域。相反,不跨域即叫同源,同源:即协议头、域名、端口完全一致。举个例子:
URL 说明 是否允许通信
http://www.demo.com/a.js
http://www.demo.com/b.js 同一域名,不同文件或路径 允许
http://www.demo.com/lab/c.js
http://www.demo.com:8000/a.js
http://www.demo.com/b.js 同一域名,不同端口 不允许
http://www.demo.com/a.js
https://www.demo.com/b.js 同一域名,不同协议 不允许
http://www.demo.com/a.js
http://127.0.0.1/b.js 域名和域名对应相同ip 不允许
http://www.demo.com/a.js
http://x.demo.com/b.js 主域相同,子域不同 不允许
http://demo.com/c.js
http://www.demo1.com/a.js
http://www.demo2.com/b.js 不同域名 不允许
解决跨域问题常用的解决方案有:
1、JSONP:利用script标签可跨域的特点,在跨域脚本中可以直接回调当前脚本的函数。
2、CORS:服务器设置HTTP响应头中Access-Control-Allow-Origin值,解除跨域限制。
3、代理 与 反向代理
4、document.domain + iframe跨域
5、postMessage跨域
附: