什么是正向代理服务器?
我们在浏览网站时,浏览器直接与网站服务器进行通信。如果在本地建立一个代理服务器,浏览器通过它,再与网站通信,那么这台代理服务器就是正向代理服务器。
正向代理服务器常用于代理上网、数据截取分析等。
![91c4b319b40415a91b0ae1fbb4af01e1.png](https://i-blog.csdnimg.cn/blog_migrate/f9d5a400e2710561625e99f500573fe6.jpeg)
题外话:
有正向代理,就是反向代理。
与正向代理相对应,反向代理服务器假设在网站一方。
当用户通过浏览器访问网站时,数据收该反向代理服务器接收,再转发给网站服务器,这种代理服务器,称之为反向代理服务器。
反向代理常用于网站防护,WAF(Web应用防火墙),如ShareWAF,就是一种典型的反向代理服务器WAF。
换个角度看:客户端用的是正向代理服务器;服务器端用的是反向代理服务器。
本文将开发一个http正向代理服务器:
完整代码如下:
var http = require("http");
var url = require("url");
http.createServer(function(req,res){
console.log("start request:",req.url);
var option = url.parse(req.url);
option.headers = req.headers;
var proxyRequest = http.request(option, function(proxyResponse){
proxyResponse.on("data",function(chunk){
console.log("proxyResponse length",chunk.length);
});
proxyResponse.on("end",function(){
console.log("proxyed request ended");
res.end();
})
res.writeHead(proxyResponse.statusCode,proxyResponse.headers);
});
req.on("data",function(chunk){
console.log("in request length:",chunk.length);
proxyRequest.write(chunk,"binary");
})
req.on("end",function(){
console.log("original request ended");
proxyRequest.end();
})
}).listen(8080);
代码解读:
1、整个代码,会建立一个http服务器,并监听8080端口:
![9d6d4825169c58291dd617ca8522cfeb.png](https://i-blog.csdnimg.cn/blog_migrate/1469bb5b72b13653c0aa8e459f2faa85.jpeg)
2、当接收到请求信息时,从请求头发获取信息并进行转发:
![980786409e4f82551d9222237f1497e5.png](https://i-blog.csdnimg.cn/blog_migrate/fa607b3f7d434451a43a37e272df0678.jpeg)
3、以上两点最重要,其余就是对信息输出,以方便我们了解到代理是否生效、代理内容如何等:
![e05b8f822be3ecbeedd3fb5650750768.png](https://i-blog.csdnimg.cn/blog_migrate/726f16900f8cf2c4e31cd448f0685d1c.jpeg)
实际使用测试:
对浏览器设置http代理:
![a7d1c45bda1ae4e3bf96b3d3931d5641.png](https://i-blog.csdnimg.cn/blog_migrate/517209731ee1b4b0ba1de99aac8f710e.jpeg)
当然,事先是需要启动我们刚写好的代理服务器的。
访问一个网页,这时可以看到各种信息输出:
![7307bcf63e3c40084c40bbcffe070cb3.png](https://i-blog.csdnimg.cn/blog_migrate/9c922c3d15e2e86dd7389c0c77729789.jpeg)
同时,浏览器中也是能看到网页可以正常打开:
![aad35b62da60609d1a9f6641fbe486eb.png](https://i-blog.csdnimg.cn/blog_migrate/4af96a95806970edd8ac6cfcb3fd4c19.jpeg)