跨域之server proxy

161 阅读1分钟

还有一种比较常用的方法: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官网上的数据,跨域成功。