http代理服务器的设计与实现

http代理服务器的设计与实现

ID:11893823

大小:199.04 KB

页数:10页

时间:2018-07-14

http代理服务器的设计与实现_第1页
http代理服务器的设计与实现_第2页
http代理服务器的设计与实现_第3页
http代理服务器的设计与实现_第4页
http代理服务器的设计与实现_第5页
资源描述:

《http代理服务器的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、HTTP代理服务器的设计与实现1、实验目的Ø熟悉并掌握Socket网络编程的过程与技术;Ø深入理解HTTP协议,掌握HTTP代理服务器的基本工作原理;Ø掌握HTTP代理服务器设计与编程实现的基本技能。2、实验环境Ø接入Internet的实验主机;ØWindowsxp或Windows7/8;Ø开发语言:C/C++(或Java)等。3、实验内容(1)设计并实现一个基本HTTP代理服务器。要求在指定端口(例如8080)接收来自客户的HTTP请求并且根据其中的URL地址访问该地址所指向的HTTP服务器(原服务器),接收HTTP服务器的响应报文,并将响应

2、报文转发给对应的客户进行浏览。(2)设计并实现一个支持Cache功能的HTTP代理服务器。要求能缓存原服务器响应的对象,并能够通过修改请求报文(添加if-modified-since头行),向原服务器确认缓存对象是否是最新版本。(选作内容,加分项目,可以当堂完成或课下完成)(3)扩展HTTP代理服务器,支持如下功能:(选作内容,加分项目,可以当堂完成或课下完成)a)网站过滤:允许/不允许访问某些网站;b)用户过滤:支持/不支持某些用户访问外部网站;c)网站引导:将用户对某个网站的访问引导至一个模拟网站(钓鱼)。4、实验方式每位同学上机实验,实验

3、指导教师现场指导。5、实验过程(1)浏览器使用代理为了使浏览器访问网址时通过代理服务器,必须进行相关设置,以IE浏览器设置为例:打开浏览器à工具à浏览器选项à连接à局域网设置à代理服务器,具体过程如图1-1所示。图1-1浏览器的代理服务器设置(2)多线程使用使用函数_beginthreadex创建子线程,使用函数_endthreadex结束线程,详情见CSDN。6、参考内容代理服务器,俗称“翻墙软件”,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。如图1-2所示,为普通Web应用通信方式与采用代理

4、服务器的通信方式的对比。图1-2Web应用通信方式对比代理服务器在指定端口(例如8080)监听浏览器的访问请求(需要在客户端浏览器进行相应的设置),接收到浏览器对远程网站的浏览请求时,代理服务器开始在代理服务器的缓存中检索URL对应的对象(网页、图像等对象),找到对象文件后,提取该对象文件的最新被修改时间;代理服务器程序在客户的请求报文首部插入,并向原Web服务器转发修改后的请求报文。如果代理服务器没有该对象的缓存,则会直接向原服务器转发请求报文,并将原服务器返回的响应直接转发给客

5、户端,同时将对象缓存到代理服务器中。代理服务器程序会根据缓存的时间、大小和提取记录等对缓存进行清理。本实验需实现一个简单的HTTP代理服务器,可以分为两个步骤:(首先请设置浏览器开启本地代理,注意设置代理端口与代理服务器监听端口保持一致)。a)单用户代理服务器单用户的简单代理服务器可以设计为一个非并发的循环服务器。首先,代理服务器创建HTTP代理服务的TCP主套接字,通过该主套接字监听等待客户端的连接请求。当客户端连接之后,读取客户端的HTTP请求报文,通过请求行中的URL,解析客户期望访问的原服务器IP地址;创建访问原(目标)服务器的TCP套

6、接字,将HTTP请求报文转发给目标服务器,接收目标服务器的响应报文,当收到响应报文之后,将响应报文转发给客户端,最后关闭套接字,等待下一次连接。b)多用户代理服务器多用户的简单代理服务器可以实现为一个多线程并发服务器。首先,代理服务器创建HTTP代理服务的TCP主套接字,通过该主套接字监听等待客户端的连接请求。当客户端连接之后,创建一个子线程,由子线程执行上述一对一的代理过程,服务结束之后子线程终止。与此同时,主线程继续接受下一个客户的代理服务。参考代码#include"stdafx.h"#include#include

7、ndows.h>#include#include#pragmacomment(lib,"Ws2_32.lib")#defineMAXSIZE65507//发送数据报文的最大长度#defineHTTP_PORT80//http服务器端口//Http重要头部数据structHttpHeader{charmethod[4];//POST或者GET,注意有些为CONNECT,本实验暂不考虑charurl[1024];//请求的urlcharhost[1024];//目标主机charcookie[1024*10]

8、;//cookieHttpHeader(){ZeroMemory(this,sizeof(HttpHeader));}};BOOLInitSocket

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。