跨域的两种方式

172 阅读1分钟

CORS

在header(response.setHeader)中写入Access-Control-Allow-Origin:url

若是想允许多个url则使用response.headers[referer]

JSONP

由于某些浏览器不支持CORS,于是开发者需要使用创造一个script然请求js,然后js会返回一个回调函数,然后这个回调函数里面饱含着开发者需要的数据,回调函数的名字可以是随机的,以callback的形式传递给后台

优点:1.支持跨域 2.兼容ie

缺点:1. 由于是script标签读不到像ajax那么精确的状态,只能知道是成功还是失败 2. 由于是script标签,所以只能发get请求,不支持post

function jsonp(url) {
  return new Promise((resolve, reject) => {
    const random = "frankJSONPCallbackName" + Math.random();
    window[random] = data => {
      resolve(data);
    };
    const script = document.createElement("script");
    script.src = `${url}?callback=${random}`;
    script.onload = () => {
      script.remove();
    };
    script.onerror = () => {
      reject();
    };
    document.body.appendChild(script);
  });
}

jsonp("http://qq.com:8888/friends.js").then(data => {
  console.log(data);
});