解决跨域的解决方案有哪些?
于2023-08-25 16:02:09发布
31
1. 直接在服务器上设置响应头解决。以node.js的express为例
const express = require('express');
const server = express();
server.all("*", function (req, res, next) {
// 设置允许跨域的域名,*代表允许任意域名跨域,这里的*可以写成具体的域名
res.header("Access-Control-Allow-Origin", "*");
....
});
2. 使用nginx配置反向代理跨域
3. 使用jsonp解决跨域,例子:
var script = document.createElement('script');
script.src = 'http://localhost:8080/jsonp/?name=小明&age=20&callback=callback';
document.getElementsByTagName('head')[0].appendChild(script);
function callback(data){ //这里假设后端返回的回调函数是callbak
console.log(data)
}
当script被插到页面时,后面的src即会被执行。需要注意的是,这里并不是只要这么做就能跨域请求,服务器也需要对应的操作才可以。下面是服务器的部分代码 :(这里用node.js举例)
server.get('/jsonp', function(req,res){
var obj = req.query;
//通过src属性来发起的请求,只能以函数的形式返回。不能按正常套路来返回数据。如 :res.send( {name : obj.name, age : obj.age} ) 是错误的!
res.send( obj.callback + '(' + JSON.stringify({name : obj.name, age : obj.age}) + ')' )
res.end();
});
当服务器返回callbak函数时,则会去执行我们前端的那个callbak函数。这就是为什么我们需要写一个callbak函数在那里的原因