随着Intranet发展与应用的普及,对Intranet的安全,研究人员在许多方面都作了研究和探索,取得了有效的成就·在硬件层采用路由与主机屏蔽方式来限制非法用户对站点的访问;在网络IP层,采用支持安全协议的1 6等新的rp协议;在应用层进行信息的数字加密和用户的身伽人证等·防火*(FirewaII)是保护Intranet网络不受非法用户攻击的主要方案之一,它的结构可以依据硬件的分布和网络安全的程度而有所变化,就其原理而言,主要有基于网络IP层的包过滤防火*(Packet Filter)和基于应用层的代理服务器(proxy).代理服务器无论在大型网络还是小型网络中,都有很重要的作用,一方面它可以监测用户及数据包,起到防火墙的作用,另一方面,又可以记录网络的各种数据,以便于对网络的管理。
web服务由于其数据量大,共享程度高,因而使总体访问速度较慢·提高web站点的访问速度,一方面提高网络的通信质量,另一方面提高数据访问的有效性.H'仃p代理服务是提高数据有效性的方法·本文就实际设计与实现
H'仃P代理的过程作出分析·
1HTTP原理与代理实现过程
1.1HTTP协议
客尸浏览器在请求一个web页面(如http://www.hubpu.edu.cn/index.html)时,它首先与服务器建立连接,连接成功后,它要将所请求的页面(含主机及文档),所用的协议及版本,语言及版本,所能接收的M丨ME类型,编码类型以及连接状况等一些本地信息参数等交送给服务器,web服务器收到请求后,发回所交送页面的信息的响应头信息(如协议认可,服务器类型,文档最后修改日期,长度等),然后才发送页面内容,最后双方断开联接.
由于一个web页面中还可能包含有图象,声音,以及另外的超链接等,在客户机收到web页面后,搜索其中的图象链接和声音链接,然后再请求这些页面。因此,要完成一个完整的web页显示,必须通过建立多次的c/s请求和发送。
从这个意义上来说,H'仃p是一个无连接,无状态的协议。以后客户要重新访问一个旧页面时,如果应用软件不支持本地CacheR存技术,则每次必须重新建立连接和传输数据。
1.2 HTTP代理实现
在H p代理中,代理服务器作为应用级网关,起到客
户与服务器的桥梁作用·客户代理(如,Netscape)将自己的所有请求发给代理服务器,代理服务器监听到客户的连接请求后,首先验证客户的身份信息,通过之后,接收客户的请求数据,并解析出所要的服务器地址、端口、请求的文档等。接下来代理服务器通过自己的socket连接到所指定的服务器上,将客户的信息传递给web服务器,将web服务器的响应传递给客户.代理服务器应至少有两个socket来协调客户与web服务器的数据传输,一个是作为客户的服务器做侦听,另一个则作为客户向远程web服务器请求.对客户而,代理服务器是一个服务器,但对于web服务器而言,则是一个访问的客户.而且对于客户来说,代理服务器是透明的,除了在访问开始前对客户代理进行设置之外,客户可以忽略代理服务器的存在.代理服务程序工作过程如图
在系统设计中,采用两个CAsyncSocket类的继承CCIientSocket和CWebserverSocket来分别实现与客户和web服务器的连接.由于CAsyncSocket是工作于异步的非阻塞方式,因此,在程序中,必须为这两个socket的连接同步定义同步变量。本系统中采用事件同步的方式来实现·
BOOL bClientConnected=FA LSE;
BOOL bConnectedTOServer=FALSE;
HANDLE hEvent;
{用CCIien tsoc ket接受客户连接,验证身份成功后,则使bCIientConnected:'I'R('E;}
hEvent=CreateEvcnt(N(iLL,TRUE,FAI.SE,NULL);
{用CWeb““Soc奴t连接到远程web服务器,连接成功后,设置事件SetEvent(hEvent))
WaitForSingIeObject(hEvent,50000《));//使双方都连接成功后,方可继续,同步等待时间50s
CloseHandIe(hEvent);
{进行代理服务处理,接收一方的数据,发送给另一方,直到任一方断开连接}
2优化的代理技术
为了提高www的访问的速度,同时加强代理服务器的
作者简介:张明武(1972、),男,硕士,主研方向:计算机网络,计算机接口技术,叩电话:陈启祥,硕士,讲师:楚惟善,教授:刘劲葵,硕士、工程师收稿日期:2佣0一07一31
一]45一
1监听2客户请求连接理服务器
5传送给对方
.接至远程Web服务Web服务器
3身份验证代
4请求页面
6接收双方的数据,
8断开连接对页面数据和响应头7断开连接
用户管理,在系统设计过程中,采用了proxy Cachea冲技术和用户身份认证技术,提高系统访问及管理的有效性和高效性·
图1 H P代理服务器工作原理
2·1身份认证
为了简化客户端的应用软件,本系统在不增加客户端任何软件或对其系统进行改变的情况下,对客户的身份进行认证·即采用主机名/IP地址识别法来确认用户的有效性·
利用TCP/伊协议进行通信时,无论是何种应用协议,在传输层都转化成socket进行联接,两个socket之间利用五元组来实现联接和通信·socket五元组标识如下:
{协议源伊地址源端口号目的地址目的端口}在代理服务程序进入监听状态后,在Listen()等待客户的联接请求,一旦有请求,则触发FD ACCEPT事件,在OnAccept事件处理函数中即可进行验证客户信息·实现主要过程如下:
SOCKET socket;
Sockaddr in m ClientSocket;
socket.SockId=accept(ListenSocket,(struct socketaddr in)&socket.addr,&sizeof(m ClientSocket))
if(socket.SockId==INAVLID_SOCKET)return false,
CString IpAddr=inet ntoa(socket.addr.sin addr);
//将网络《p转化为点分格式串
if(IpAddr不满足条件)//判断IP地址是否满足条件return false,
2·2 Cache技术
cache技术是许多工程人员一直在研究的课题,现在也有一些比较成熟的技术产品·特别是对于H'仃p协议的代理缓冲技术,许多国家都有国家级的cache站点,这主要用来镜象一些远程的服务器·H、p的代理缓冲的目的也在于减少网络传输开销·
当客户联接后,所提交的请求主要有4种:Get,put,Head,post.其中Get和Head请求是最多也是最频繁的请求·put和post这两个操作要向远程web服务器提交数据,Post操作还要启动CGI应用程序,因此它们利用缓冲区的意义不大·在本系统中,只对Get请求作出缓冲处理,对其它请求则直接由代理服务器发送给远程的web服务器·
2·却缓冲结构
代理缓冲区由于其数据量很大,而且更新速度与计算机速度对比起来是很慢的·因此,采用文件缓冲来作为缓冲区的存取方式·缓冲区管理主要在于缓冲区的存取、刷新与检索·
代理服务器通过缓冲结构索引来管理存于硬盘上的实际web页面,以加强对缓冲区的管理和提高数据的采集速度。
本系统所建立的索引表结构WebFILE INDEX如下·
struct WebFILE INDEX int nlndex;//索引
int nFromReqServer//与ReqSener关联项
char strPathIMAX PATHI;//存入本地缓冲区相对路径
一[46.一
charstrExpire1401;//请求文档过期日期串SYSTEMTIME StoreTime//存入缓冲区时间
struct WebFILE INDEX*pNext;//指向下一个节点
}*IpWebFileIndex,WebFileIndex;
结构WebFILE INDEX标识了一个web页面在本地缓冲区的相对于系统所设定的web代理缓冲区的相对路径,文档的过期串以及存入缓冲区的时间等·代理服务器维护着由这个结构组成的链表,并且不断更新这个链表·strExpire值是在H仃P进行请求远程web服务器后,作为响应传回来的·当表中的strE№ire超出规定的范围时,代理服务器对此节点进行删除·
在代理服务器收到一个Get请求后,解析出服务器名与路径和文件,通过在结构Reqse“er中检索是否有此主服务器的数据已存,如果有,则通过其索引值在WebFlLE INDEX中去定位文件·系统是以服务器名来判断是否在WebFILE_1NDEX中搜索,即便服务器缓冲表中存在,所请求的页有可能已过期,或者根本不存在,需要重新向远程web服务器请求后交给客户并更新本地缓冲·ReqServer结构如下:
struct ReqServer int ndx,
int nToWebFile;//与WebFILE INDEX关联charstrServerName1501;//请求Web服务器DNS char strServerIP1161;//请求web服务器《P struct ReqServer*pNext;//指向下一个节点
}IpReqServer'sReqServer;
考虑到请求服务器时,即可以用域名DNS,也可以用伊地址来标识服务器,故Reqse“er中有两个元素标识服务器,在代理服务器向远程web服务器请求后,解析出相应的域名(DNS)或丨p地址,填入到结构表中,使两者保持地址一致,当不同的客户分别以DNS和伊地址来请求页面时,代理服务器能在缓冲区内定位到同一页面·
2·2·2缓冲区的刷新
代理服务缓冲区是不断更新的·当客户请求一个在代理缓冲区内已经过期的页面时,代理服务器必须向远程的web服务器请求新的数据信息,在送交给客户的同时,用新的数
据刷新缓冲区,并刷新相应的参数(如Expire,StoreTime等
对于一些更新周期极慢的页面(它以StoreTime,Expire作为衡量标准),一方面说明访问此页面的客户量较小,另一方面有可能此页面是一个失效的坏页面(如主机已取消等),因此需要对其进行清理·在缓冲容量满时,这些页面最先让出缓冲区·在代理服务器的起动,退出,空闲或定时的时间内,代理服务器要对缓冲区进行清理,去掉一些失效的页面·
2·2·3超前的页面采集
对于一些常用的比较多的web站点页面,在客户未请求时就可以自动更新,或当客户申请一个页面时,它把与之相联的超链接在客户点击之前就传过来,这就是超前的页面采集·超前的页面采集可以极大地提高用户访问的时效性,提高系统的速度和效率·本系统主要采取建立常用web站点库的方法,对于常用的站点,在系统空闲时,自动更新其缓冲区·
3结束语
要提高w曲服务的服务质量,一方面在web服务器端提高数据的检索速度和命中率,另一方面提高H p代理的智能化服务,减少网络负载,也是一种非常有效的方法·