一般解决跨域请求有三种方法:
1、前后端配合 使用 jsonp
2、纯后端解决
3、服务器代理
先来看看 jsonp 解决方案:
jsonp解决方案原理非常简单,利用不受同源策略的标签的特性,实现跨域请求,有哪些不受同源策略影响的标签呢?img link script
img是图片,link是请求css的,script是请求js的,从三个的特性中看出script标签最适合了因为能获得js代码,并能执行,所以我们只需要在全局上提前创建一个函数,当请求jsonp得到js代码时,获得的代码是一个执行的回调函数,函数中的参数是你想要的后端数据。这时候你只需要在提前声明的全局函数里面接受获得的数据就是了。原理很简单。要注意的是你必须将函数名告诉后端,后端才能返回正确的js执行函数回调。
纯后端解决:
后端设置请求头,让请求不存在同源限制
// 随意找的node后端请求头设置,网上一大堆
res.header("Access-Control-Allow-Origin", req.headers.origin); // 设置允许来自哪里的跨域请求访问(req.headers.origin为当前访问来源的域名与端口)
res.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE,OPTIONS"); // 设置允许接收的请求类型
res.header("Access-Control-Allow-Headers", "Content-Type,request-origin"); // 设置请求头中允许携带的参数
res.header("Access-Control-Allow-Credentials", "true"); // 允许客户端携带证书式访问。保持跨域请求中的Cookie。注意:此处设true时,Access-Control-Allow-Origin的值不能为 '*'
res.header("Access-control-max-age", 1000); // 设置请求通过预检后多少时间内不再检验,减少预请求发送次数
服务器代理:
服务器之间的通信是没同源限制的。所以利用服务器之代理也可以实现跨域,至于怎么实现,写过后端之后自然知道了