跨域的理解
什么是跨域?
当 A 网站去调用 B 网站的数据时,由于浏览器的同源策略 (域名、协议、端口号相同),跨域访问会受到限制。
解决方案
- JSONP
- CORS
JSONP 的理解:
- JSONP 它不是一个新的技术,更多的是前端与后端的约定;用来实现不同网站之间的数据;
- 主要利用 HMTL 中的 script 标签天生就有跨域能力的特性(动态添加 script 标签);
- 作为前端要做的是:
- 需要在全局范围内准备一个函数,用来接收后台传过来的数据;
- 发送请求,并且将我们在全局范围内准备的函数通过参数的形势传递出去;
- 作为后端要做的是:
- 接收前台传递过来的函数的名字;
- 通过各种手段获取数据;
- 返回前端传递过来的函数的调用,并且将数据通过函数参数的形势传递到前端;
注意:
JSONP只支持 get 请求;
CORS 的理解:
-
CORS 请求跨域数据,原理是直接使用 XHR 这个对象,来发起 get 和 post 请求;
-
启用 CORS,需要后端进行特殊的配置,否则前端发起 CORS 类型的 AJAX 请求,后盾处理不了;
-
比如 node 中:
- 安装 cors 第三方模块;
- 启用 cors 中间件;
-
在 PHP 中:
- 后端配置:
header("Access-Control-Allow-Origin:*"); header("access-Control-Allow-Methods: post,get);复制代码
JSONP 小例子:
通过 360 搜索获取数据;
// 全局函数function GetData(data){ let str = ""; data.result.forEach(item => { str += `