还有一种比较常用的方法:Server Proxy,顾名思义,服务器代理的意思;如果说前两种方法是前端直接和跨域目标服务器发送直接请求(无论是src还是ajax),那么服务器代理则是由本域服务器请求跨域服务器(服务端不存在同源策略,也就不存在跨不跨域这一说),然后将得到的信息发送给前端,这一过程中页面只是请求了本域服务器,并没有直接和跨域服务器发生直接关系,所以也很好理解这为什么叫服务器代理。
Server Proxy实践
做个简单的demo实例:
const url = require('url');
const http = require('http');
const https = require('https'); // cnode是https协议
const server = http.createServer((req, res) => {
https.get('https://cnodejs.org', (resp) => {
let data = "";
resp.on('data', chunk => {
data += chunk;
});
resp.on('end', () => {
res.writeHead(200, {
'Content-Type': 'application/json; charset=utf-8'
});
res.end(data);
});
})
}).listen(3000, '127.0.0.1');
console.log('监听 127.0.0.1:3000,服务已启动');
然后再浏览器,打开127.0.0.1:3000,浏览器就会去请求本域服务器,然后本域服务器作为代理去请求cnodejs官网然后返回data给浏览器,我们可以在浏览器看到结果:
我们成功得到了cnodejs官网上的数据,跨域成功。