js udp通信_Node.JS实战17:开发一个正向代理服务器
什么是正向代理服务器?
我们在浏览网站时,浏览器直接与网站服务器进行通信。如果在本地建立一个代理服务器,浏览器通过它,再与网站通信,那么这台代理服务器就是正向代理服务器。
正向代理服务器常用于代理上网、数据截取分析等。
题外话:
有正向代理,就是反向代理。
与正向代理相对应,反向代理服务器假设在网站一方。
当用户通过浏览器访问网站时,数据收该反向代理服务器接收,再转发给网站服务器,这种代理服务器,称之为反向代理服务器。
反向代理常用于网站防护,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:开发一个正向代理服务器相关推荐
- Vue.js学习笔记—input-number:实战:开发一个数字输入框组件
参考<Vue,js>实战(梁灏编著) input-number:实战:开发一个数字输入框组件 git代码 index.html <!DOCTYPE html> <html ...
- Unity编辑器开发(五):实战、开发一个AB包编辑器工具
前言 在我们上一篇(Unity编辑器开发(四):实战.开发一个AB包编辑器工具)的结尾,我们拥有了如下图中那样的一个编辑器窗口: 接下来我们来完成最后部分,也就是包括创建AB包,清理AB包,删除AB包 ...
- js udp通信_nodejs源码分析第十九章 -- udp模块
udp不是面向连接的协议,所以使用上会比tcp简单,他和tcp一样,使用四元组来标记通信的双方(单播的情况下).我们看看udp作为服务器和客户端的时候的流程. 1 在c语言中使用udp 1.1 服务器 ...
- node.js 创建服务器_Node.js HTTP软件包–创建HTTP服务器
node.js 创建服务器 An HTTP server caters to client requests and sends appropriate response. For example, ...
- js 拉勾网效果_Node.js 中实践基于 Redis 的分布式锁实现
在一些分布式环境下.多线程并发编程中,如果对同一资源进行读写操作,避免不了的一个就是资源竞争问题,通过引入分布式锁这一概念,可以解决数据一致性问题. 作者简介:五月君,Nodejs Developer ...
- Unity编辑器开发(三):实战、开发一个AB包编辑器工具
前言 本系列将会从零开始开发一个轻量级的AB包编辑器工具(也就是打包或者管理AssetBundle的工具),完成以后,他的最终应用界面可能是如下这样的: 界面详解: 1.Create:创建一个新的空的 ...
- node.js 实现udp传输_Node.js实战15:通过udp传输文件。
本文将要写一个udp服务器,和一个udp客户端,并实现客户端发送文件给服务器. 服务器端 代码如下:var dgram = require("dgram"); server(); ...
- kewail node 短信_Node.js代码示例_Node.js短信短信 | 微米-中国领先的短信彩信接口平台服务商...
Node.js短信接口一代码示例 请求 var http = require('http'); var querystring = require('querystring'); var postDa ...
- js双通信java,js和java的http通信
可查看基于ajax的前后端多种数据交互: js 发送text & 接收 text js部分 var xmlhttp; function callback() { if (xmlhttp.rea ...
- js ws 状态_node.js中ws模块创建服务端和客户端,网页WebSocket客户端
首先下载websocket模块,命令行输入 npm install ws 1.node.js中ws模块创建服务端 // 加载node上websocket模块 ws; var ws = require( ...
最新文章
- Get 与 Post 【总结】 (实例:从a.html到b.aspx传值)
- ITK:提取网格边界上的顶点
- HttpURLConnection 发送http请求帮助类
- tomcat 默认站点的配置
- 【KMP】重复子串(ybtoj KMP-2)
- 建模步骤_古建设计 | sketchup建模步骤教程(简易入门版)
- android 热修复 需要重启应用嘛?_Android热修复方案盘点
- 第12章[12.4] 鼠标移入移除时弹出和关闭窗口
- 盘式制动优于鼓式制动吗?
- 如何在微博侧栏中加入自己的微博[js]
- laravel 5 : Class 'input' not found
- paper 63 :函数比较:imfilter与fspecial
- php的一些编码问题
- Java输入/输出(I/O)流
- oce专项认证 oracle_Oracle Certification Program | Oracle 中国
- 生物信息学入门之基本概念之蛋白质同源检测和折叠识别
- 如何从Oracle官网上下载JDK
- Python爬虫selenium的使用实例爬取知乎首页数据!
- c语言修仙亲吻片段,《C语言修仙》by一十四洲,摘抄
- Linux系统下C语言实现遍历该目录下所有文件
热门文章
- 有道词典在谷歌Chrome浏览器中无法取词的解决方法
- Linux系统开机提速我有招!
- 2019年初,我收到人生中的第一笔稿费
- pytorch 训练过程acc_pytorch应用(四)训练过程可视化visdom
- 强化学习ppt_东台中等专业学校北大青鸟班PPT演讲大赛颁奖典礼顺利举行
- python数据分析推荐课程_coursera上有哪些值得学习的Python,数据分析的课程
- Shell 脚本执行错误 $‘\r‘:command not found
- GoLand添加一个已有项目的相关配置
- swift4 label显示html,Swift:在标签或textView中显示HTML数据
- 2021-3测试通过:eclipse安装svn插件