美文网首页
跨域的一些看法

跨域的一些看法

作者: 郑馋师 | 来源:发表于2019-12-14 00:52 被阅读0次

跨域

面试必问!!!

同源

用window.origin可以得到源,就是
协议+域名+端口号
若两个url三个全部相同被叫做同源

同源策略

浏览器专门设计的功能限制
浏览器规定:
若js在源A中运行只可获得A中的数据,不能获得B中的数据,也就是不能跨域

这是为了保护客户隐私

  1. qq.com和钓鱼网站发的只有请求头里面refer不同,所以无法区分发送者
  2. 检查refer是可行的,但是还是要主动预防有人偷数据的行为,
    安全链条取决于最薄弱的那一点,万一安全组有新手咋办?
    eg
    若是qq.com引用了cdn.com/js,这时候可以成功发送请求却没办法得到回应。
    即使是同一端口or域名orip,但如果不同源也会限制,因为出现过共用ip or 端口or域名的情况。

为何可以跨域用css,js,图片?

因为同源限制只针对数据访问,上述引用是不知道其内容,仅仅是引用,是不知道具体字符的。

解决方法

CORS

完美方案
用之前会先提前声明可共享,会写在响应头里面
eg

if (path === "/friends.json") {
    response.statusCode = 200;
    response.setHeader("Content-Type", "text/json;charset=utf-8");
    response.setHeader("Access-Control-Allow-Origin", "http://frank.com:9999");//这里是cors协议
    response.write(fs.readFileSync("./public/friends.json"));
    response.end();
  }

只要在响应头里面写一句允许xxx进去就可了

JSONP

这是与JSON毫无关系,只是一开始喜欢把JSON数据塞进JS,现在可以塞其他数据,eg:XML
可以实现无CORS的跨域,不可读取数据,却可以把数据塞进JS,从而引用数据
eg

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}`;//这里本来是function,但大家都叫做callback了
    script.onload = () => {
      script.remove();
    };
    script.onerror = () => {
      reject();
    };
    document.body.appendChild(script);
  });
}

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

面试必考!!!

优点

  • 可跨域
  • 兼容IE
    缺点
  1. script标签无法做到像AJAX那样精准
  2. 无法得到状态码
  3. 不支持POST,只支持GET

其他方法

  1. 动态网页
    (如果请求了数据库就是动态,否则是静态)

相关文章

  • 跨域的一些看法

    跨域 面试必问!!! 同源 用window.origin可以得到源,就是协议+域名+端口号若两个url三个全部相同...

  • Vue中的jsonp跨域

    1、360跨域访问 百度跨域和360跨域有一些区别 经典案列:百度下拉

  • 跨域解决方向

    跨域解决方向 1、被调用方解决 基于支持跨域的解决思路 基于http协议支持跨域方面的一些规定 在响应头中添加支持...

  • 三种实现跨域请求的思路

    首先介绍一些什么是跨域,MDN上关于跨域的解释如下: 跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP...

  • 深入跨域问题(3) - 利用 JSONP 解决跨域

    深入跨域问题(1) - 初识 CORS 跨域资源共享;深入跨域问题(2) - 利用 CORS 解决跨域深入跨域问题...

  • Web前后端跨域问题处理

    跨域问题有前台跨域(iframe间)和后台跨域。 前台跨域的解决方案可以采用跨域文档通讯(Cross domain...

  • 关于设置env等环境变量的思考

    1、如何处理跨域后台处理跨域前端处理跨域浏览器处理跨域 前端本地处理跨域:代理线上跨域的处理方式:Nginx反向代...

  • 跨域问题详解分析

    参考文档 CORS详解 跨域资源共享 CORS 详解 js中几种实用的跨域方法原理详解 跨域的那些事儿 跨域与跨域...

  • 跨域问题:好几种解决方案

    跨域分为广义跨域和狭义跨域 广义跨域:一个域下的文档或脚本试图去请求另一个域下的资源; 广义跨域可以分为以下几种:...

  • SSM框架配置CORS跨域

    什么是跨域? 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。 常见的跨域场景: 跨域资...

网友评论

      本文标题:跨域的一些看法

      本文链接:https://www.haomeiwen.com/subject/thaqnctx.html