什么是正向代理服务器?

我们在浏览网站时,浏览器直接与网站服务器进行通信。如果在本地建立一个代理服务器,浏览器通过它,再与网站通信,那么这台代理服务器就是正向代理服务器。

正向代理服务器常用于代理上网、数据截取分析等。

题外话:

有正向代理,就是反向代理。

与正向代理相对应,反向代理服务器假设在网站一方。

当用户通过浏览器访问网站时,数据收该反向代理服务器接收,再转发给网站服务器,这种代理服务器,称之为反向代理服务器。

反向代理常用于网站防护,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端口:

2、当接收到请求信息时,从请求头发获取信息并进行转发:

3、以上两点最重要,其余就是对信息输出,以方便我们了解到代理是否生效、代理内容如何等:

实际使用测试:

对浏览器设置http代理:

当然,事先是需要启动我们刚写好的代理服务器的。

访问一个网页,这时可以看到各种信息输出:

同时,浏览器中也是能看到网页可以正常打开:

更多本系列文章:

Node.js实战16:用http模块创建web服务器

Node.js实战15:通过udp传输文件

Node.js实战14:一个简单的TCP服务器

Node.js实战13:fs模块奥义!开发一个数据库

Node.js实战12:fs模块高级技巧

js udp通信_Node.JS实战17:开发一个正向代理服务器相关推荐

  1. Vue.js学习笔记—input-number:实战:开发一个数字输入框组件

    参考<Vue,js>实战(梁灏编著) input-number:实战:开发一个数字输入框组件 git代码 index.html <!DOCTYPE html> <html ...

  2. Unity编辑器开发(五):实战、开发一个AB包编辑器工具

    前言 在我们上一篇(Unity编辑器开发(四):实战.开发一个AB包编辑器工具)的结尾,我们拥有了如下图中那样的一个编辑器窗口: 接下来我们来完成最后部分,也就是包括创建AB包,清理AB包,删除AB包 ...

  3. js udp通信_nodejs源码分析第十九章 -- udp模块

    udp不是面向连接的协议,所以使用上会比tcp简单,他和tcp一样,使用四元组来标记通信的双方(单播的情况下).我们看看udp作为服务器和客户端的时候的流程. 1 在c语言中使用udp 1.1 服务器 ...

  4. node.js 创建服务器_Node.js HTTP软件包–创建HTTP服务器

    node.js 创建服务器 An HTTP server caters to client requests and sends appropriate response. For example, ...

  5. js 拉勾网效果_Node.js 中实践基于 Redis 的分布式锁实现

    在一些分布式环境下.多线程并发编程中,如果对同一资源进行读写操作,避免不了的一个就是资源竞争问题,通过引入分布式锁这一概念,可以解决数据一致性问题. 作者简介:五月君,Nodejs Developer ...

  6. Unity编辑器开发(三):实战、开发一个AB包编辑器工具

    前言 本系列将会从零开始开发一个轻量级的AB包编辑器工具(也就是打包或者管理AssetBundle的工具),完成以后,他的最终应用界面可能是如下这样的: 界面详解: 1.Create:创建一个新的空的 ...

  7. node.js 实现udp传输_Node.js实战15:通过udp传输文件。

    本文将要写一个udp服务器,和一个udp客户端,并实现客户端发送文件给服务器. 服务器端 代码如下:var dgram = require("dgram"); server(); ...

  8. kewail node 短信_Node.js代码示例_Node.js短信短信 | 微米-中国领先的短信彩信接口平台服务商...

    Node.js短信接口一代码示例 请求 var http = require('http'); var querystring = require('querystring'); var postDa ...

  9. js双通信java,js和java的http通信

    可查看基于ajax的前后端多种数据交互: js 发送text & 接收 text js部分 var xmlhttp; function callback() { if (xmlhttp.rea ...

  10. js ws 状态_node.js中ws模块创建服务端和客户端,网页WebSocket客户端

    首先下载websocket模块,命令行输入 npm install ws 1.node.js中ws模块创建服务端 // 加载node上websocket模块 ws; var ws = require( ...

最新文章

  1. Get 与 Post 【总结】 (实例:从a.html到b.aspx传值)
  2. ITK:提取网格边界上的顶点
  3. HttpURLConnection 发送http请求帮助类
  4. tomcat 默认站点的配置
  5. 【KMP】重复子串(ybtoj KMP-2)
  6. 建模步骤_古建设计 | sketchup建模步骤教程(简易入门版)
  7. android 热修复 需要重启应用嘛?_Android热修复方案盘点
  8. 第12章[12.4] 鼠标移入移除时弹出和关闭窗口
  9. 盘式制动优于鼓式制动吗?
  10. 如何在微博侧栏中加入自己的微博[js]
  11. laravel 5 : Class 'input' not found
  12. paper 63 :函数比较:imfilter与fspecial
  13. php的一些编码问题
  14. Java输入/输出(I/O)流
  15. oce专项认证 oracle_Oracle Certification Program | Oracle 中国
  16. 生物信息学入门之基本概念之蛋白质同源检测和折叠识别
  17. 如何从Oracle官网上下载JDK
  18. Python爬虫selenium的使用实例爬取知乎首页数据!
  19. c语言修仙亲吻片段,《C语言修仙》by一十四洲,摘抄
  20. Linux系统下C语言实现遍历该目录下所有文件

热门文章

  1. 有道词典在谷歌Chrome浏览器中无法取词的解决方法
  2. Linux系统开机提速我有招!
  3. 2019年初,我收到人生中的第一笔稿费
  4. pytorch 训练过程acc_pytorch应用(四)训练过程可视化visdom
  5. 强化学习ppt_东台中等专业学校北大青鸟班PPT演讲大赛颁奖典礼顺利举行
  6. python数据分析推荐课程_coursera上有哪些值得学习的Python,数据分析的课程
  7. Shell 脚本执行错误 $‘\r‘:command not found
  8. GoLand添加一个已有项目的相关配置
  9. swift4 label显示html,Swift:在标签或textView中显示HTML数据
  10. 2021-3测试通过:eclipse安装svn插件