实现跨域请求的几种方法

跨域都需要后端配合修改的,可以使用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代理跨域
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值