浅谈正向代理和反向代理
1.什么是代理服务器(Proxy Serve)?
提供代理服务的电脑系统或其它类型的网络终端,代替网络用户去取得网络信息。
2.为什么使用代理服务器?
提高访问速度:
由于目标主机返回的数据可以存放在代理服务器中,所以客户下一次访问此站点相同的数据时,会直接从代理服务器的中读取,起到了缓存的作用,对于热门网站能明显提高访问速度。
防火墙作用:
由于所有的客户机请求都必须通过代理服务器访问远程站点,因此可以在代理服务器上设限,过滤不安全信息。同时正向代理中客户端可以隐藏自己的IP,免受攻击。
突破访问限制:
互联网上有许多开发的代理服务器,客户机在访问受限时,可通过不受限的代理服务器访问目标站点,通俗说,我们使用的FQ浏览器就是利用了代理服务器,可以直接访问外网。
3.正向代理(Forward Proxy)
正向代理:一个位于客户端和原始服务器之间的服务器,客户端为了从目标服务器取得内容,向代理代理发送一个请求并指定了目标服务器,然后代理服务器向目标服务器转发请求并将获得的内容返回给客户端。平时我们说的代理就是指正向代理。
举个例子:我们想从Google上查询API文档,但由于某种原因访问不了,所以借助代理服务器(如:ShadowSock),然后让它去Google获取文档信息,最后返回给我们。
那么,此处的ShadowSock就是正向代理,为客户端做了代理。此过程中,Google作为服务端其实并不知道我们(客户端)访问了它,只知道代理服务器(ShadowSock)访问了它。通俗点就是为服务端作了代理。
4.反向代理(Reserve Proxy)
反向代理:一个部署在服务端,用于接受客户端请求,且将客户端请求转发给真实(内部)服务器的代理者(服务器),并将真实服务器的反馈结果返回给代理者,最后由代理者将结果返回给客户端。
举个例子:我们想给自己的微信服务号申请认证服务,那么我们向微信发起了认证请求,此时微信并不自己去作认证,而是将此任务分派给与其合作的认证商,最后认证商返回结果给微信,再由微信告知我们认证是否成功。
那么,此处的微信服务号认证服务就是反向代理,为服务端(微信)作了代理。此过程中,我们作为客户端并不知道我们的认证请求是由认证商完成的,只知道微信帮我完成了认证。
5.正向代理和反向代理的区别
位置不同:
正向代理,架设在客户机和目标主机之间;
反向代理,架设在服务器端;
代理对象不同:
正向代理,代理客户端,服务端不知道实际发起请求的客户端;
反向代理,代理服务端,客户端不知道实际提供服务的服务端;
用途不同:
正向代理,为防火墙内的客户端提供访问网络的途径;
反向代理,将防火墙内的服务器提供给网络访问请求;
安全性不同:
正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此必须采取安全措施以确保仅为授权的客户端提供服务
反向代理的客户端对服务端都是透明的,但客户端却并不知道自己访问的是哪个服务端
6.正向代理的应用
1. 访问原来无法访问的资源
2. 用作缓存,加速访问速度
3. 对客户端访问授权,上网进行认证
4. 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
7.反向代理的应用
1. 保护内网安全
2. 负载均衡
3. 缓存,减少服务器的压力
Nginx作为著名的反向代理服务器,安装在服务端,主要用于转发客户端请求,并把请求合理转发给后台哪台真实服务器来处理当前请求。
- Django---MTV模型、基本命令、简单配置
- Vue.js 入门
- 解读python中SocketServer源码
- java学习:Hibernate学习-用oracle sequence序列生成ID的配置示例
- Wikibon年度预测:2018年人工智能的八个演变趋势
- Google宣布TensorFlow Lite 可支持 Core ML!
- 开源软件十位贡献者,PHP之父只能排第十,第一名当之无愧!
- DataTable排序结果的纠正
- web框架
- java:利用xpath删除xml中的空节点
- java array to list
- Python之Dijango的“坑” hostname, aliases, ipaddrs = gethostbyaddr(name) UnicodeDecodeError: 'utf-8' cod
- nGrinder 简易使用教程
- UI设计高效学习网站&工具,来自学长的收藏夹哦
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CSS八种让人眼前一亮的HOVER效果
- 懒加载图片以获取最佳性能的最佳方案
- Egg.js 试水 - 天气预报
- Egg.js试水 - 文章增删改查【前后端分离】
- Flutter基础widgets教程-Offstage篇
- 一份礼物.apk - o泡果奶-的逆向分析
- 代码审计-.NET下的序列化与反序列化(BinaryFormatter)
- 02.视频播放器整体结构
- Spring中@Component和@Bean
- HTTP对接方式
- 使用ShardingSphere 过程中遇到的关于spring boot 版本的问题
- 腾讯云TKE-Pod案例: 容器内crontab问题
- iOS音视频接入 - TRTC多人视频会议
- Spring系列 SpringMVC的请求与数据响应
- codeforces 1349A(数学)