跨域 跨域 它来了

62 阅读2分钟

什么叫跨域

是浏览器为了安全性,设置同源策略导致的,是浏览器的一种限制。同源策略 规定了WEB页面只能请求同源的资源。url由协议,域名,端口号。里面只要有一个不同就会导致跨域。

如何解决跨域

JSOPN

jsonp 是利用html里的script标签,src是不存在跨域限制的来实现。

  1. 客户端通过script回向其他服务器发送请求,同时定义回调函数
  2. 浏览器把准备好的数据,用请求的回调函数填充返回
  3. 浏览器获取JS脚本,会立刻执行此脚本,也就会执行回调函数。所以会拿到相关数据

前后端配合

CORS

CORS,即跨源资源共享(Cross-Origin Resource Sharing),是一种用于解决AJAX请求在 web 应用中跨域问题的技术。由于浏览器的同源策略限制,一个web页面只能向与该页面相同域名、协议和端口的服务器发出HTTP 请求。如果向不同的源发送请求,就会触发同源策略的限制。CORS 技术通过添加特殊的HTTP 头,允许浏览器和服务器进行跨域通信。

后端设置

postMessage

postMessageWeb API 的一部分,用于在不同的浏览器上下文之间进行安全的跨源通信,如不同的窗口、iframe 或者和工作线程之间的通信。

这里是如何使用 postMessage 实现跨域的基本步骤:

  1. 发送消息: 你可以通过调用 otherWindow.postMessage(message, targetOrigin) 来发送消息。otherWindow 是一个对其他窗口的引用,如 iframecontentWindow 属性、执行窗口打开的结果,或是命名窗口。message 是你要发送的数据,可以是任何结构化克隆算法能处理的 JavaScript 数据类型。targetOrigin 是一个字符串,指定了接收消息的文档必须来自哪个源。
  2. 接收消息: 在接收窗口,你需要监听 message 事件来接收消息。事件处理函数将会接收一个 MessageEvent 实例,这个实例有几个有用的属性,包括 data(发送的消息数据)、origin(发送消息的文档源)和 source(发送消息的 Window 对象)。

前端设置

nginx

Nginx是一个开源的、高性能的、可扩展的 HTTP 静态服务器和反向代理服务器。它也可以用作邮件代理服务器和通用的 TCP/UDP 代理服务器。

服务器与服务器之间不存在跨域

websocket

WebSocket 是一种网络通信协议,提供了全双工(full-duplex)通信渠道,也就是说,服务器和客户端可以同时进行数据传输,而不需要像 HTTP 请求那样由客户端先发起请求。WebSocket 在单个TCP 连接上提供持久的连接,以便在客户端和服务器之间进行实时通信。