浏览器跨域问题

105次阅读
没有评论

共计 722 个字符,预计需要花费 2 分钟才能阅读完成。

最近经常看到有关浏览器跨域的问题,查了很多资料,所以在这总结一下。

由于浏览器的 同源策略,当我们想要进行一个 ajax 请求或者获取其他域名的数据时就会出现跨域问题。避免跨域问题可以有以下几种方法:

document.domain

我们可以在要传输数据的两个页面设置相同的 document.domain=”www.example.com”,使其主域相同。但这只有当两个页面的主域相同时才能设置。比如 ”www.a.com” 和 ”bt.a.com”,但 ”a.com” 和 ”b.com” 就不行。

window.name

因为浏览器窗口共用一个 window.name,利用这种 hack 设置 window.name 为传输的数据,可以在同一个窗口页面内进行数据传输。但缺陷是数据量不会太大,并且只能传输字符串。

CORS

HTML5 新增的 CORS 方案。简单来说就是在服务器端设置 Access-Control-Allow-Origin:* 则代表允许任何域连接,也可以设置为想要连接的域地址。

JSONP

利用 script 标签的 src 获取 url 可以实现跨域,通过在 url 中设置 callback 参数,url 返回的是 json 数据,然后在客户端设置回调函数处理数据,就可以实现跨域。但缺点是只能用于 get 方法。

postMessage 方法

HTML5 新增 window.postMessage(message, targetOrigin, [transfer)方法,message 代表传输的数据,targetOrigin 代表接受的目标域,transfer 是可选变量,代表跟随 message 一起传输的数据,且传输过去后在发送端不再可用。
接受端通过监听 message 事件,调用 event.data 来获取数据。

正文完
 
西蒙
版权声明:本站原创文章,由 西蒙 2017-04-10发表,共计722字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码