跨域指浏览器不能执行其他网站的脚本及dom。是一种安全机制。
比如在iframe中操作其他网站的dom。
限制:cookie、localstorage、indexDB、js、dom、ajax
域名、协议、端口都相同的才没有跨域问题。
文章地址《详解跨域(最全的解决方案)》
- 通过jsonp
- document.domian + iframe
- window.name + iframe
- location.hash + iframe
- postMessage
- cors跨域资源共享
- websocket协议跨域
- node代理跨域
- nginx代理跨域
- jsonp
- 动态创建script标签,传递参数及回调
- 只能处理get方法
- document.domain + iframe
- 不同二级域名,可以都设置document.domain为一级域名,都设置的原因是设置之后端口为null
- window.name + iframe
- window.name可以设置返回一个字符串,长度达到2M,不同页面及不同域下的加载仍然存在
- 不同域设置window.name属性,但是由于跨域不能操作,在页面加载成功后需要替换成同源的src,因为window.name不会变化,所以可以拿到数据
- location.hash + iframe
- iframe通过将参数表现在location.hash中进行通信
- postMessage()跨域
- 进行post方法跨域
- 在父窗口调用iframe.contentWindow.postMessage(data, iframeUrl)进行通信
- 在子窗口调用window.parent.postMessage(data, parentUrl)
- cors
- 需要服务器同步支持,浏览器发现是跨域会自动添加origin的请求头
- 简单请求跟非简单请求
- 简单请求是指head、get、post
- websocket协议跨域
-websocket实现浏览器与服务器的双工通信,同时允许跨域 - node代理跟nginx代理不了解