解决跨域的解决方案有哪些?

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函数在那里的原因