标签:postMessage

postMessage() 是HTML5的跨域通讯的一种解决方案,允许来自不同源的脚本采用异步方式进行有效的通信,可以实现跨文本文档、多窗口、跨域消息传递,多用于窗口间数据通信,这也使它成为跨域通信的一种有效的解决方案。

前端跨域请求方案整理实践

跨域请求,是前端开发比较常见的问题。通常为了提高的开发效率,项目开发过程中进行前后端分离,部署各自独立,就可能会出现前端后域名不一致,在通讯过程中就会出现跨域的问题。由于项目开发过程中涉及,借此机会对跨域问题进行整理。

1前端开发中跨域方式有哪些?

跨域请求,是前端开发比较常见的问题。通常为了提高的开发效率,项目开发过程中进行前后端分离,部署各自独立,就可能会出现前端后域名不一致,在通讯过程中就会出现跨域的问题。由于项目开发过程中涉及,借此机会对跨域问题进行整理。

下面也简单总结一下,有以下几种跨域方式:

  1. JSONP(JSON with Padding)跨域:JSONP实现跨域的核心原理是利用<script>标签没有跨域限制的特性,通过在请求的URL中添加回调函数名称,服务器返回一个JavaScript函数的调用,并将需要传递的数据作为参数传递给该函数。该方式只支持GET请求,而且只能实现单向数据传输。
  2. CORS(Cross-Origin Resource Sharing)跨域:CORS是一种标准的跨域解决方案,它通过在服务端设置Access-Control-Allow-*头信息来实现跨域。该方式可以支持GETPOST等多种请求方式,而且可以双向通信,实现更灵活的数据传输。CORS需要浏览器和服务器同时支持。
  3. WebSocket跨域WebSocket是一种新的协议,它可以在浏览器和服务器之间建立持久化的连接,从而实现双向实时通信。在跨域方面,WebSocket也需要服务器支持跨域。
  4. 代理跨域:代理跨域是一种常见的解决方案,它的核心思想是在客户端和服务端之间加一个中间层,将客户端的请求先发送给中间层,中间层再将请求发送给服务端,待服务端响应后再将响应发送给客户端。因为是同源策略下的服务端请求,所以不存在跨域问题。
  5. postMessage跨域:postMessage是HTML5引入的一种消息传递机制,它可以让来自不同源的脚本建立通信渠道,从而实现跨域数据传输。但是该方式需要目标窗口明确设置监听事件,否则容易受到恶意攻击。