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项目