Web 代理是一种存在于网络中间的实体,提供各式各样的功能。现代网络系统中,Web 代理无处不在。

提高访问速度。

因为客户要求的数据存于代理服务器的硬盘中,因此下次这个客户或其它客户再要求相同目的站点的数据时,就会直接从代理服务器的硬盘中读取,代理服务器起到了缓存的作用,对热门站点有很多客户访问时,代理服务器的优势更为明显。

Proxy可以起到防火墙的作用。

因为所有使用代理服务器的用户都必须通过代理服务器访问远程站点,因此在代理服务器上就可以设置相应的限制,以过滤或屏蔽掉某些信息。这是局域网网管对局域网用户访问范围限制最常用的办法,也是局域网用户为什么不能浏览某些网站的原因。拨号用户如果使用代理服务器,同样必须服从代理服务器的访问限制,除非你不使用这个代理服务器。

通过代理服务器访问一些不能直接访问的网站。

互联网上有许多开放的代理服务器,客户在访问权限受到限制时,而这些代理服务器的访问权限是不受限制的,刚好代理服务器在客户的访问范围之内,那么客户通过代理服务器访问目标网站就成为可能。国内的高校多使用教育网,不能出国,但通过代理服务器,就能实现访问因特网,这就是高校内代理服务器热的原因所在。

安全性得到提高。

无论是上聊天室还是浏览网站,目的网站只能知道你来自于代理服务器,而你的真实IP就无法测知,这就使得使用者的安全性得以提高。

代理服务器工作流程

  1. 当客户端A对web服务器请求时,此端提出请求时,此请求会首先发送到代理服务器.
  2. 代理服务器接收到客户端请求后,会检查缓存中是否存有客户端所需要的数据.
  3. 如果代理服务器没有客户端A所请求的数据,它将会向WEB器提交请求.
  4. WEB服务器响应请求的数据.
  5. 代理服务器向客户端A转发Web服务器的数据.
  6. 客户端B访问web服务器,向代理服务器发出请求.
  7. 代理服务器查找缓存记录,确认已经存在WEB服务器的相关数据.
  8. 代理服务器直接回应查询的信息,而不需要再去服务器进行查询,从而达到节约网络流量和提高访问的速度目的.

正向代理

正向代理通常用户知道的,比如我们使用google,或者访问公司内部网络的时候。。。

这里使用一个node的模块http-proxy展示一个简单正向代理示例

// 新建一个demo文件加
// 新建一个server.js 8000.js// server.js内容
// 正向代理 :如axios,http.proxy 用户直到,类似于梯子
// 反向代理 :nginx 解决用户请求的,用户不知道// 使用http-proxy 进行正向代理
var http = require('http');
var httpProxy = require('http-proxy')// 创建代理服务器
let proxy = httpProxy.createProxyServer()let server = http.createServer((req, res) => {proxy.web(req, res, {target: 'http://localhost:8000'})
})server.listen(3000)
// server启动成功
server.on('listening', () => {console.log('http启动完成')
})// 关闭HTTP服务器server.on('close', () => {console.log('服务器关闭')
})// 8000.js 内容
let http = require('http')let server = http.createServer((req, res) => {res.write('this is port 8000')res.end()
})server.listen(8000)// server启动成功
server.on('listening', () => {console.log('http启动完成')
})// 关闭HTTP服务器
server.on('close', () => {console.log('服务器关闭')
})// 配置host文件 把www.test.com www.demo.com配置为本地
// 启动server.js的服务
// 启动8000的服务
// 我们在客户端访问localhost:3000就会拿到服务器返回的结果 this is port 8000

反向代理

用户是无感知的,主要是为了减轻服务器压力,或者做cdn缓存,

对用用户来说,他访问www.baidu.com只知道访问的是这个域名,并不知道具体是那个服务器做的处理,通常在项目中我们回使用nginx配置代理,实现负载均衡…

下边是一个简单的demo

// 在当前目录新建一个proxy.js, 新建一个5000.js/*
* proxy.js内容
*/
// 反向代理
let httpProxy = require('http-proxy')
let http = require('http');
// 这是我们配置的域名,我们可以访问这些域名,拿到对应的结果
let hosts = {'www.test.com': 'http://localhost:5000','www.demo.com': 'http://localhost:8000',
}// 创建代理服务器
let proxy = httpProxy.createProxyServer()let server = http.createServer((req, res) => {// 拿到host 访问对应的服务器let host = req.headers['host'].split(':')[0]proxy.web(req, res, {target: hosts[host]})
})server.listen(3000)
// server启动成功
server.on('listening', () => {console.log('http启动完成')
})// 关闭HTTP服务器
server.on('close', () => {console.log('服务器关闭')
})/*
* 5000.js
*/
let http = require('http')let server = http.createServer((req, res) => {res.write('this is port 5000')res.end()
})server.listen(5000)// server启动成功
server.on('listening', () => {console.log('http启动完成')
})// 关闭HTTP服务
server.on('close', () => {console.log('服务器关闭')
})// 启动8000.js的服务
// 启动5000.js的服务
// 启动proxy.js的服务
//在浏览器访问 www.test.com:3000, www.demo.com:3000

总结

以上就是简单的代理的利用,方便自己对代理的理解和认识,做一个引子。。。。

HTTP之proxy相关推荐

  1. ES6 Proxy 性能之我见

    ES6 Proxy 性能之我见 本文翻译自https://thecodebarbarian.com/thoughts-on-es6-proxies-performance Proxy是ES6的一个强力 ...

  2. ATS统计量proxy.node.client_throughput_out的单位调研

    proxy.node.client_throughput_out表示客户端字节吞吐量,那单位是什么呢? 我通过在SourceInsight中搜索ATS 5.3.1的源码,在traffic_shell. ...

  3. 设计模式之代理模式(Proxy Pattern)

    定义:为其他对象提供一种代理以控制这个对象的访问,也叫做委托模式. 咱们比作游戏,通俗讲代理模式就是,一个主题虚基类派生出两个子类,一个玩家类,实现相关操作,一个是代练类,代替执行玩家相关操作,代练类 ...

  4. MySQL 水平分区方案Spock Proxy

    Spock Proxy 是由实际项目产生的一个开源项目(Spock是Rails的应用,Speck Proxy应当可用于Rails之外的,例如PHP或.NET),基于MySQL Proxy开发,是MyS ...

  5. 使用MySQL Proxy解决MySQL主从同步延迟

    MySQL的主从同步机制非常方便的解决了高并发读的应用需求,给Web方 面开发带来了极大的便利.但这种方式有个比较大的缺陷在于MySQL的同步机制是依赖Slave主动向Master发请求来获取数据的, ...

  6. mysql读写分离(MySQL Proxy 安装和使用)

    一.必备软件: 1.LUA    可以去LUA的官方下载:www.lua.org 2.MySQL Proxy    这里有好多二进制版本.     http://mysql.cdpa.nsysu.ed ...

  7. Proxy与NAT有什么区别

    在internet共享上网技术上,一般有两种方式,一种是proxy代理型,一种是NAT网关型,关于两者的区别与原理,身边很多人都不是很明白,下面我来讲讲我的理解,如有不对的,欢迎指正. 1.先说应用例 ...

  8. 设计模式之代理模式(Proxy)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  9. devServer proxy跨域 设置代理 proxy

    概念 什么是同源策略 同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一 ...

  10. 用es6 (proxy 和 reflect)轻松实现 观察者模式

    js中 观察者 之前我们一般通过事件机制完成 ex: 注册监听 Event.listen('changeName', name => console.log(name)) 派发事件 Event. ...

最新文章

  1. python linux系统管理与自动化运维_《Python Linux系统管理与自动化运维》赖明星著【摘要 书评 在线阅读】-苏宁易购图书...
  2. 罗马数字转整数 · Roman to Integer
  3. 软工作业 6:软件设计—— 用户体验(案例分析)
  4. 来说一说你对锁都怎么分类?
  5. Windows下动态加载可执行代码原理简述
  6. CRM WebUI and Hybris的Product页面标题实现
  7. python 环境常用指令(updating...)
  8. hdu 5299——Circles Game
  9. mysql 排版 指令_Mysql语句排版
  10. Oracle PL/SQL编程之变量
  11. SQL数据库实战之查找当前薪水详情以及部门编号dept_no
  12. 《自己动手做交互系统》——1.2 制作过程
  13. 官网下载storage manager方法
  14. iCollections—桌面管理工具
  15. POJ 1359 Spacecraft Malfunction G++
  16. 「docker实战篇」python的docker爬虫技术-安卓模拟器(二)
  17. Staged Event Driven Architecture (SEDA) 介绍
  18. 解析:百度算法之细雨算法2.0
  19. 七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)...
  20. 虚拟机建立游戏服务器,在虚拟机上创建游戏服务器

热门文章

  1. matlab基础语法
  2. mysql练习-数据查询之嵌套查询
  3. OpenCV的calcHist
  4. Mybatis ResultType处理返回类型
  5. 利用Smart3D(CC)进行物体建模
  6. 《Android开发源码精编解析》最新PDF版开源,安卓工程师进阶实战
  7. win7系统双硬盘双系统问题解决
  8. c++实现种子填充算法与扫描线算法
  9. 关于创业公司初期的股份
  10. 利用“bert模型”预测英语“完形填空”答案