上一篇跨域解决方案(一)说明篇中对跨域有了详细说明,
这一篇将每一种方案罗列出来总结对比。
跨域解决方案一览表 | ||||
序号 | 解决方案 | 简述 | 优点 | 缺点 |
1 | document.domain | 将子域和父域的domain都设置成父域地址 | 设置简单 | 仅限于子域名与父域名不同的情况 |
2 | window.location.hash | A与B通信,通过代理页C(与A同域)来设置 | 用于与iframe标签嵌入的页面进行通信 | 1、设置起来比较麻烦,需要借助代理页。 2、数据容量和类型有限制 |
3 | window.name | A与B通信,也需要通过代理页C(与A同域)完成 | 1、适用于与iframe标签嵌入的页面进行通信 2、与location.hash对比容量较大,可以容纳2MB | 设置起来比较麻烦,需要借助代理页。 |
4 | Websocket | Websocket是一种通信协议,不受同源策略限制。 只要设置了Origin字段,并且域名在白名单范围内,服务器就可以通信 | 只要设置了Origin字段,并且域名在白名单范围内,服务器就可以通信 | 只适用于ws://和wss://作为协议前缀的域名 |
5 | postMessage | 发送方可通过postMessage(msg,origin)发送消息,写明发送内容和发送方域名地址(协议+域名+端口)即可。 接收方可通过onmessage进行监听拿到消息。 | 设置简单,可用于向服务器请求数据,也可以进行网页之间的传值。 | 1、发送方和接收方均要注意判断源地址,以免信息泄露。 2、在实际开发中要注意配置不同的环境地址。(开发、测试和生产) |
6 | jsonp | 通过插入script标签,发送请求,因为非xhr请求,所以不受浏览器限制,即可实现跨越。 | 设置简单,可兼容老的浏览器 | 1、需要前后端配合,协同回调函数名。 2、因为不是xhr请求,所以不具备该请求的特性。 |
7 | CORS | CORS即跨域资源共享,是w3c的标准,使用自定义的http请求头,服务端设置Access-Control-Allow-Origin为请求方域名或者* | 设置简单,最常用的跨域办法。 | 不兼容老的浏览器(IE6、IE7、Opera min) |
8 | Ngnix | 通过ngnix配置,将数据发送方的地址转发到数据请求方,就避免了跨域问题。 | 设置简单 | 依赖于ngnix配置 |