title: http/https代理服务器的代码实现
date: 2019-12-22 16:57:42
dscription: 代码实现一个http/https代理服务器的代码实现

原文地址https://tomsworkspace.github.io/2019/12/22/http-https代理服务器的代码实现/

http/https代理服务器的代码实现

代理服务器工作原理

 代理服务器作为一种既是服务器又是客户机的中间程序,主要用于转发客户系统的网络访问请求。但是,代理服务器不只是简单地向真正的因特网服务器转发请求,它还可以控制用户的行为,对接收到的客户请求进行决策,并根据过滤规则对用户请求进行过滤。

 通过代理服务器,网络管理员可以实现比用包过滤路由器更严格的安全策略。不同于使用通用的包过滤路由器来管理通过防火墙的因特网服务流向,代理服务器通过在网关上为每项需要的应用安装专用的代码(代理服务)来工作。如果网络管理员没有为某一特殊服务安装代理服务代码,该服务就不会被支持,也不会通过防火墙转发相应的客户请求。并且,这种代理服务器码能被配置成仅支持某项服务的网络管理员认为可以接受的那部分特征,而不支持其他的特征。

代理服务器主要功能

 代理服务器具有许多功能。对于我们个人用户而言,通过代理上网,能让我们访问一些直接访问会比较慢的网站,比如互联网用户访问教育网的网站。对于单位而言,内部使用代理可以预先过滤一些病毒,保障上网的安全,还能有效地进行访问控制、网速限制,上网监控等等。

 以下介绍代理服务器的基本功能:

(1)一个lP地址或Internet帐户供多个用户同时使用

 在目前情况下,IP地址是Internet中有限的宝贵资源,如果将这些IP地址仅仅用于单个的请求Internet访问的用户,不能不说是一种资源浪费。使用代理服务器可以做到通过一个IP同时向多个用户提供Internet的访问,对于通过电话拨号连通Internet的内部网络,则可以实现利用一条电话线,一个modem和一个Internet帐户,让内部网络上所有用户同时访问Internet,这样就充分利用了IP地址资源。

(2)缓存功能,可以降低费用,提高速度

 安装时,代理服务器会在硬盘上开出一块磁盘空间作为缓存区,将代理用户从Internet上接收的内容下载一份保存起来,当再有用户访问同样内容时,就直接从缓存区传送给用户,而不再从Internet上寻找。代理服务器的这项功能可以大大地提高访问速度,同时也降低了通信费用,是一项相当重要的功能。

(3)对内部网络用户进行权限和信息流量计费管理

 通过代理服务器,网管员在提供Internet服务时,可以容易地对内部网络用户进行访问权限和信息流量计费的管理。网管员不但能够做到只允许被授权的局域网用户访问Internet,还能够控制这些用户在哪些时间、使用哪台计算机访问哪些类型的Internet服务。对于已经获准访问的Internet的用户,网管员还能够按照多种方式进行信息流量的计费管理,如:按照个人计费、按照部门所属计算机计费等,为网络管理带来了极大的方便。

(4)对进入内部网络的Internet信息实施监控和过滤

 为了避免那些与业务无关的信息进入内部网络浪费通信资费,各个机构对允许访问的内容往往有一些相应的规定。通过代理服务器,网管员不但可以采取过滤的方法简便地控制从Internet流入内部网络的信息内容,还能对用户访问Internet的情况进行实时监控和建立监查日志存档备查。

实现功能:

服务器端
 (1)在指定端口(例如 9080)接收来自客户的 http/https 请求并且根据其中的 URL 地址访问该地址所指向的 http/https 服务器(原服务器),接收服务器的响应报文,并将响应报文转发给对应的客户进行浏览。
 (2)支持日志功能,可以将用户的访问目标和内容记录到指定的文件。
 (3)网站过滤:允许/不允许重点内容访问某些网站
 (4)多级代理功能,可以指定上级代理服务器实现多级代理

客户端

 实现设置IE代理的GUI界面

实现步骤

(1)客户端界面通过修改注册表实现代理设置
(2)代理服务器主线程等待客户端连接。
(3)代理服务器接收客户端发送的 TCP 请求报文,建立线程处理并解析 HTTP 头部(method, url, host 等信息)。
(4)在建立的线程中建立服务器到目标地址的socket连接。
(5)开启两个线程来处理上行和下行的流量,只负责单纯的转发。
(6)客户端(即浏览器)收到代理服务器返回的报文,解析并显示。

代码

idea java项目

http-https代理服务器的代码实现相关推荐

  1. netty初使用——实现http及https代理服务器

    承接前两篇用java原生nio和bio写的https代理服务器,这篇是用netty实现https代理服务器.上篇用nio实现代理服务器时需要自己去控制消息发送和接收的次序,我们就用了一个selecto ...

  2. 使用soapUI代替WSDL2JAVA生成cxf HTTPS 客户端调用代码

    如果直接用cxf下面的wsdl2java生成https服务调用代码,会报https证书的错误.在你不想导入证书的情况下,可以使用soapUI进行客户端代码的生成,步骤如下: 1.设置CXF,如下图: ...

  3. android搭建https,android 搭建https Server(示例代码)

    在android上采用http协议的服务器,需求有点奇葩,非要用https更是醉了.这里只要求单向https认证,不要双向认证. 本文采用的开源框架Nanohttpd( https://github. ...

  4. python搭建https代理服务器_使用NGINX作为HTTPS正向代理服务器

    NGINX主要设计作为反向代理服务器,但随着NGINX的发展,它同样能作为正向代理的选项之一.正向代理本身并不复杂,而如何代理加密的HTTPS流量是正向代理需要解决的主要问题.本文将介绍利用NGINX ...

  5. python实现http/https代理服务器

    代码: # encoding:utf-8 import socket import _threadclass Header:"""用于读取和解析头信息"&quo ...

  6. go语言搭建代理服务器_Go实现Https代理服务

    作者:Zarten知乎专栏:Go开发深入详解知乎ID: Zarten简介: 互联网一线工作者,尊重原创并欢迎评论留言指出不足之处,也希望多些关注和点赞是给作者最好的鼓励 ! 概述 http(s)代理在 ...

  7. 安卓应用安全指南 5.4.1 通过 HTTPS 的通信 示例代码

    5.4.1 通过 HTTPS 的通信 示例代码 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY- ...

  8. 使用nginx作为HTTPS正向代理服务器(七层透传代理、中间人代理)

    [前言] 在讲解nginx正向代理https之前,我们先来解答几个小疑问. 1.nginx是什么? Java同学肯定知道apache服务器,一个很牛,但是也很庞大的web服务器.能当web服务器的不仅 ...

  9. [批处理]自动设置本机系统代理服务器

    可以自动修改本机的系统代理(IE代理)服务器地址. 可以是指定计算机名的动态IP,也可以是静态IP,也可指定端口号,感觉非常有用. 下载后先编辑,修改你要设置代理服务器的计算机名和端口号,或直接指定I ...

最新文章

  1. TFS 2010 使用手册(二)项目集合与项目
  2. 【项目管理】八大绩效域裁剪考虑事项
  3. unity图片拖不进去_Unity UGUI实现简单拖拽图片功能
  4. java工程打成jar包 - 使用maven assembly插件打包及手动打包
  5. C语言和我的世界指令哪个难,我的世界难度有什么区别 难度选择指令介绍
  6. C语言之do_while输出菱形
  7. Cocos2dx---------------------添加Admob广告
  8. 前端把cookie写在父域里_单点登录的三种实现方式
  9. TreeView 动态绑定数据及在当前节点操作
  10. (day 27 - 递归分治 )剑指 Offer 33. 二叉搜索树的后序遍历序列
  11. gtx1050ti最稳定的驱动_最便宜图灵吃鸡卡 华硕GTX 1650评测
  12. 【SPOJ-SUBLEX】Lexicographical Substring Search(字典序第k小的子串(不重复统计同一个子串)---后缀自动机)
  13. PostMan 汉化
  14. 原生ajax请求超时处理,关于原生AJAX
  15. c++用msxml6.0解析xml
  16. c语言if的作用,c语言if语句的用法
  17. Win10 更改不了注册表,重启之后恢复原样
  18. 常见python基础面试题_常的解释|常的意思|汉典“常”字的基本解释
  19. Cys(Npys)-(Arg)₉,H2N-C(Npys)-RRRRRRRRR-OH
  20. 儒家思想的核心:仁、义、礼、智、信、忠、孝、悌、节、恕、勇、让

热门文章

  1. sysfader:iexplore.exe-应用程序错误的解决方法
  2. 最短路径——迪杰斯坷垃算法(有向图、单源最短路径)
  3. Luffy之注册认证(容联云通讯短信验证)
  4. 简单聊聊mysql的脏读、不可重复读、幻读
  5. 电商项目实战第六节: CSS3+HTML5+JS 设计案例【考拉海购网站】之【页底信息,网站备案信息】
  6. Ecstore 导入队列执行
  7. 深度学习笔记一:FCN讲解(转载)
  8. python7(文件,join方法,jieba,wordcloud词云绘制)
  9. 蓝宝石压力传感器工作原理与优势
  10. 【学员分享】新东方英语学费价目表!