简单的HTTP代理服务器的实现(基本功能+拓展功能)

实现功能:

  • 在指定端口(例如 8080)接收来自客户的 HTTP 请求并且根据其中的 URL 地址访问该地址所指向的 HTTP 服务器(原服务器),接收 HTTP 服务器的响应报文,并将响应报文转发给对应的客户进行浏览
  • 支持 Cache 功能:求能缓存原服务器响应的对象,并能够通过修改请求报文(添加 If-Modified-Since 头行),向原服务器确认缓存对象是否是最新版本
  • 网站过滤:允许/不允许重点内容访问某些网站
  • 用户过滤:支持/不支持某些用户访问外部网站
  • 网站引导:将用户对某个网站的访问引导至一个模拟网站(钓鱼)

完整的代码(VS2015):https://github.com/Salanghei/ProxyServer


实现步骤

1、加载套接字库,创建套接字
2、初始化套接字:设置 IP 地址和端口等属性
3、代理服务器接收客户端发送的 TCP 请求报文,并解析 HTTP 头部(method, url, host 等信息)
4、拓展功能:网站过滤,用户过滤,网站引导,检查是否有本地缓存(改造HTTP头添加 If-Modified-Since 字段)
5、代理连接到服务器,并将客户端发送的 HTTP 数据报文转发给目标服务器
6、接收目标服务器的响应报文 ,解析报文头信息:状态码为304时不需要更新缓存,并将本地缓存转发给客户端;否则直接将响应报文转发给客户端,并进行缓存
7、关闭套接字

关于程序的运行

为了使浏览器访问网址时通过代理服务器,必须进行相关设置,以 Chrome 浏览器设置为例,打开 Chrome 浏览器中的设置,点击高级,选择打开代理设置:
简单的HTTP代理服务器的实现(基本功能+拓展功能)
选择局域网设置,按如图所示进行配置
简单的HTTP代理服务器的实现(基本功能+拓展功能)
然后程序就可以监听10240端口啦~

代码是根据指导书改编的,菜鸟一枚,还望大神们多多指教~