跨域

作者: 饥人谷_鸭脖 | 来源:发表于2018-01-04 00:41 被阅读0次

JSONP

jsonp是一种跨域通信的手段,它的原理其实很简单:

  1. 首先是利用script标签的src属性来实现跨域
  2. 通过将前端方法作为参数传递到服务器端,然后由服务器端注入参数之后再返回,实现服务器端向客户端通信
  3. 由于使用script标签的src属性,因此只支持get方法

项目参考

CORS

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)
它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制, 支持现代浏览器,IE支持10以上.

实现方式:
当你使用 XMLHttpRequest 发送请求时,浏览器发现该请求不符合同源策略,会给该请求加一个请求头:Origin,后台进行一系列处理,如果确定接受请求则在返回结果中加入一个响应头:Access-Control-Allow-Origin; 浏览器判断该相应头中是否包含 Origin 的值,如果有则浏览器会处理响应,我们就可以拿到响应数据,如果不包含浏览器直接驳回,这时我们无法拿到响应数据。所以 CORS 的表象是让你觉得它与同源的 ajax 请求没啥区别,代码完全一样。

项目参考

降域

当两个页面不同域,但是它们的父域之上都相同(端口),那么可以使用降域的方法来实现跨域。

对于主域相同而子域不同的情况下,可以通过设置 document.domain 的办法来解决

项目参考

postMessage

HTML5为了解决这个问题,引入了一个全新的API:跨文档通信 API(Cross-document messaging)。

这个API为window对象新增了一个window.postMessage方法,允许跨窗口通信,不论这两个窗口是否同源。

举例来说,父窗口http://a.jrg.com向子窗口http://b.jrg.com发消息,调用postMessage方法可以了。

postMessage方法的第一个参数是具体的信息内容,第二个参数是接收消息的窗口的源(origin),即"协议 + 域名 + 端口"。也可以设为*,表示不限制域名,向所有窗口发送

项目参考

相关文章

网友评论

      本文标题:跨域

      本文链接:https://www.haomeiwen.com/subject/fpslnxtx.html