文章目录
  1. 1. 为什么会跨域?
  2. 2. 常见的解决办法
  3. 3. 自己整理

为什么会跨域?

要让两个不同源的客户端进行通信,就会遇到跨域的问题。同源策略是一个著名的安全策略,由 netscape 提出。现在所有支持 js 的浏览器都会使用这个安全策略。同源指域名、协议、端口号都相同。只要协议、域名、端口号一个不相同就会形成非同源的环境,如下。

常见的解决办法

  1. 在服务器端进行通信,因为服务器端不受跨域的限制。跨域的安全限制是对浏览器端来说的。
  2. 用 script 标签来解决,因为它的 src 属性是可以跨域的。
    eg. 往常用 script 引入外部的 js
    eg. 也可以用 js 动态创建 script 标签,并将其 append 到 body 里,就可以用这个 js 了。
  3. jsonp:它其实是一个非官方的协议,有特定的通信逻辑,但平时原生用的不多,因为 jQuery 本身就支持了 jsonp。
  4. $.ajax()$.getJSON():jQuery 提供的现成函数来实现跨域。这两种方式(其实就是一种调用方式,需要传特定的参数)的原理是将 json 数据填充进回调函数,即创建一个回调函数,在远程服务器上调用这个函数并将 json 数据形式作为参数,完成回调。
  5. iFrame 实现跨域
  6. HTML5 的 postMessage 和 onmessage

其实 jsonp 里面也是创建了 script 标签,然后通过 js 回调的形式实现了跨域访问。而 jQuery 对 jsonp 也仅仅是支持,其核心也是 jsonp。所以,归根结底,这三种方式都是常见又经常被忽略的 script 标签。

自己整理

  1. js 中常用的6种跨域解决办法
    里面详细谈了以下两点:
    (1)相同主域 + iframe
    (2)跨域 + iframe 用代理页
  2. HTML5 中的 postMessage 和 onmessage
文章目录
  1. 1. 为什么会跨域?
  2. 2. 常见的解决办法
  3. 3. 自己整理