不同跨域方法的比较

  1. document.domain+iframe
    应用范围:这种办法只能解决主域相同而子域不同,且是iframe形式的跨域;
    存在问题:安全性,当一个站点(b.a.com)被攻击后,另一个站点(c.a.com)会引起安全漏洞。
  2. JSONP
    应用范围:因为是基于script标签,所有只能进行GET请求
    存在问题:存在安全性问题,可被注入可执行的js代码(callback=alert(1)), 对于这个问题,只能通过外界的字符串过滤来解决,如禁止callback中传入括号,使用正则去除左右括号,callback=callback.replace(/\(/g,""),callback=callback.replace(/\)/g,"")
  3. CORS
    给被访问方设置Access-Control-Allow-Origin,如在php文件头部写入header('Access-Control-Allow-Origin:http://a.com:8080'),表示允许来自源http://a.com:8080的请求。这是跨域AJAX请求的根本解决方法。相比JSONP只能发GET请求,CORS允许任何类型的请求。但是IE10及以下IE版本不支持。
  4. HTML5 postMessage
    这是HTML5的新功能,用postMessage支持基于web的实时消息传递。
  5. 利用iframelocation.hash
    这个方法比较绕,原理是利用location.hash来传值。url中#号及其后面的内容就是location.hash,改变hash的值页面并不会刷新,所以可以利用hash值来进行数据传递。
    这种方法缺点也很多,诸如数据直接暴露在了url中,数据容量和类型都有限等。
  6. 利用window.name
    主要利用window.name值不随url改变而改变,只要当前页面没被关闭,window.name的值就不会改变。
此条目发表在浏览器分类目录。将固定链接加入收藏夹。

1 则回应给 不同跨域方法的比较

  1. Pingback引用通告: 跨域相关原理及解决办法 | 熊二的技术博客

发表评论

电子邮件地址不会被公开。 必填项已用*标注