跨域都需要后端配合修改的,可以使用jsonp,iframe,cors,或者h5的postMessage方法,websocket方法,也可以使用代理跨域,如nginx,nodejs
- jsonp跨域请求 (只能实现get一种请求)
html可以加载js、css,img等静态资源,根据这个原理,使用jsonp请求,相当于首先创建一个script标签,之后src引用静态资源,之后用回调函数,接收返回的数据。 - document.domain + iframe跨域 (适合主域相同,子域不同的跨域)
父窗口引入子文件,父和子的script内都设置document.domain =
‘主域’,之后可以通过window.parent.变量名访问父的元素,通过子inframe.contentWindow.把变量名访问子窗口变量 - location.hash + iframe跨域 a欲与b跨域相互通信,通过中间页c来实现。
三个页面,不同域之间利用iframe的location.hash传值,相同域之间直接js访问来通信。 具体实现:A域:a.html ->B域:b.html ->A域:c.html,a与b不同域只能通过hash值单向通信,b与c也不同域也只能单向通信,但c与a同域,所以c可通过parent.parent访问a页面所有对象。 - window.name + iframe跨域
通过iframe的src属性由外域转向本地域,跨域数据即由iframe的window.name从外域传递到本地域 - postMessage跨域 (HTML5 XMLHttpRequest Level 2中的API)
iframe.contentWindow.postMessage(JSON.stringify(data), ‘子域名’)
window.parent.postMessage(JSON.stringify(data), ‘主域名’); - 跨域资源共享(CORS)
普通跨域请求:只服务端设置Access-Control-Allow-Origin即可,前端无须设置,若要带cookie请求:前后端都需要设置。 - Nodejs中间件代理跨域
通过启一个代理服务器,实现数据的转发,也可以通过设置cookieDomainRewrite参数修改响应头中cookie中域名,实现当前域的cookie写入,方便接口登录认证。 - WebSocket协议跨域(HTML5一种新的协议) 实现了浏览器与服务器全双工通信,同时允许跨域通讯,是server
push技术的一种很好的实现。 原生WebSocket
API使用起来不太方便,我们使用Socket.io,它很好地封装了webSocket接口,提供了更简单、灵活的接口,也对不支持webSocket的浏览器提供了向下兼容。 - nginx代理跨域