一种反向Web代理的链接改写方法

文档序号:7700475阅读:161来源:国知局
专利名称:一种反向Web代理的链接改写方法
技术领域
本发明涉及计算机领域,尤其涉及一种反向Web代理HTML页面中链接的改写方法。
背景技术
反向代理服务(也称为逆向代理)是指一个Web代理服务器或Web代理网关(简 称代理服务器或代理网关)能够代理外部网络上的主机对内部网络的访问的代理服务方 式。反向代理技术可以被应用于应用层VPN(Virtual private network,虚拟专用网)(如 SSL VPN)的Web代理模块。反向代理技术的核心技术就是地址转换。从普通用户看来,反 向代理就像普通的Web服务器一样。而反向代理所代理的每一个内网Web服务器(简称内 网服务器)都好像是反向代理服务器中的一个目录。进行地址转换就需要对内网服务器响 应中的HTML页面里的链接进行改写。一般的链接改写方式有如下几种直接改写,根据正 则表达式改写,通过HTML解析模块改写。而目前的链接改写方式主要集中在代理服务器或 代理网关上,由代理服务器或代理网关的链接改写模块提供相应的改写能力。现有的链接改写方式有以下不足(1)由于链接改写主要在代理服务器或代理网关上完成,所以会占用代理服务器 或代理网关的CPU、内存等资源。(2)根据HTTP协议的要求,需要将HTML页面的大小记录在请求头的 Content-length头域中,所以完成HTML链接改写后,还需要计算其改写后的内容大小,并 相应的修改Content-length头域的值,这就需要缓存整个HTML页面。(3)由于以上两点,代理服务器或代理网关的转发速度势必会受到影响。

发明内容
本发明要解决的技术问题就是提出一种反向Web代理的链接改写方法,解决现有 技术中由于链接改写主要在代理服务器或代理网关上完成,而导致代理服务器或代理网关 的转发速度受到影响的问题,能够提高代理服务器或代理网关的处理速度。为了解决上述技术问题,本发明提供一种反向Web代理的链接改写方法,包括代理服务器或代理网关将客户端链接改写的执行代码插入到内网服务器的响应 页面,发送给客户端;客户端执行所述执行代码,即进行了链接改写。进一步地,上述链接改写方法还可具有以下特点代理服务器或代理网关将执行代码插入到内网服务器的响应页面,发送给客户端 的步骤执行之前,还执行向内网服务器转发客户端发送的请求;接收到内网服务器的响应;拼装客户端链接改写的执行代码。
4
进一步地,上述链接改写方法还可具有以下特点所述代理服务器或代理网关拼装客户端链接改写的执行代码的步骤具体包括代理服务器或代理网关使用自身的地址拼装客户端链接改写的正则表达式;根据正则表达式拼装链接改写的执行代码。进一步地,上述链接改写方法还可具有以下特点代理服务器或代理网关拼装客户端链接改写的正则表达式的步骤具体包括拼装针对HTML页面中绝对路径的URL的正则表达式;拼装针对HTML页面中相对路径的URL的正则表达式。进一步地,上述链接改写方法还可具有以下特点所述执行代码使用链接改写函数表示。进一步地,上述链接改写方法还可具有以下特点代理服务器或代理网关将执行代码插入到内网服务器的响应页面,发送给客户端 的步骤具体包括将执行代码插入到内网服务器的响应页面;在所述响应页面中插入执行所述执行代码的调用信息;计算并修改Content-length头域值;
发送所述响应页面给客户端。进一步地,上述链接改写方法还可具有以下特点发送所述响应页面给客户端的步骤具体包括发送修改了 Content-length头域的HTTP响应头;发送插入了客户端链接改写的执行代码的HTML页面内容;发送后续的HTML页面内容。进一步地,上述链接改写方法还可具有以下特点所述客户端先加载所述响应页面,根据响应页面中的所述调用信息,执行所述执 行代码。进一步地,上述链接改写方法还可具有以下特点所述客户端执行所述执行代码的步骤具体包括改写响应页面A标签后的href链接;改写响应页面Script标签后的src链接;改写响应页面Link标签后的href链接;改写响应页面IMG标签后的src链接;改写响应页面Form标签后的action链接。进一步地,上述链接改写方法还可具有以下特点所述执行代码为脚本。本发明与现有的反向Web代理的链接改写方法相比,代理服务器或代理网关的转 发速度更快,链接改写占用的内存和CPU等资源更少,由以下几个方面体现(1)只需在HTML页面开始部分插入客户端链接改写的执行代码;(2)插入客户端链接改写的执行代码并修改内网服务器响应的Content-length 头域后,就无需缓存HTML页面内容,读写效率高。


图1为本发明实施例的网络拓扑示意图;图2为本发明实施例的链接改写的具体实施流程图。
具体实施例方式在本发明中,代理服务器或代理网关将客户端链接改写的执行代码插入到内网服 务器的响应页面,发送给客户端;客户端执行所述执行代码,即进行了链接改写。下面结合附图及具体实施例对本发明进行详细说明。如图1所示,为本发明实施例使用的网络拓扑示意图。反向Web代理系统中的报 文格式符合标准的HTTP协议(其中客户端和代理网关之间的连接可以是建立在SSL协议 之上的安全连接)。在实施例中并发访问的客户端浏览器可以有多个,从而对代理网关的处 理能力有较高的要求。按照图1所示的网络拓扑结构,假设代理网关本身的URL是http:// reverse-proxy,而用户想访问的内网月艮务器 URL 是 http//www. test, com/index, html, 就需要将用户访问的HTML页面中的链接替换为http://reverse-proxy/www. test, com/ index, html,才能实现用户通过代理网关对内网服务器的访问。图2为实施例的链接改写的具体实施流程图,包括如下步骤步骤201,代理网关向内网服务器转发客户端发送的请求;在本实施例中,代理网关收到从客户端浏览器发来的请求如下GET/index. html HTTP/1. 1......Host :www. test, com然后,代理网关将该请求发送到被请求的内网服务器;步骤202,代理网关接收到内网服务器的响应;内网服务器收到客户端的请求后,回HTTP响应(其中HTML页面内容包含在HTTP 响应体内)如下HTTP/1. 1 200 OK......Content-Length 1467Connection :closeContent-Type :text/html ;charset = UTF-8<html>< ! -html 页面内容〉<head></head><body></body></html>
步骤203,代理网关拼装客户端链接改写的执行代码;代理网关收到上述HTTP响应后,使用自身的地址拼装客户端链接改写的正则表 达式;根据正则表达式拼装客户端链接改写的执行代码;该执行代码使用链接改写函数表 示;其中,拼装客户端链接改写的正则表达式具体包括
拼装针对HTML页面中绝对路径的URL的正则表达式;拼装针对HTML页面中相对路径的URL的正则表达式。本实施例中,拼装客户端链接改写的执行代码(本例中使用的是JavaScript的伪 代码),如下〈script type =" text/javascript “ >/*网关拼装的客户端链接改写的执行代码*/function replace_link() {/*根据正则表达式拼装客户端链接改写的执行代码*//*获取A标签的对象集合。*/objs = document. getElementsByTagName(“ K");/*遍历A标签的对象集合*/for(i = 0 ;i < objs. length ;i+ = 1){/*根据客户端链接改写的正则表达式改写A标签后的href链接*/}/*获取SCRIPT标签的对象集合。*/objs = document. getElementsByTagName(“ SCRIPT");/*遍历SCRIPT标签的对象集合*/for(i = 0 ;i < objs. length ;i+ = 1){/*根据客户端链接改写的正则表达式改写SCRIPT标签后的src链接*/}/*获取LINK标签的对象集合。*/objs = document. getElementsByTagName(“ LINK");/*遍历LINK标签的对象集合*/for(i = 0 ;i < objs. length ;i+ = 1){/*根据客户端链接改写的正则表达式改写LINK标签后的href链接 */
}/*获取IMG标签的对象集合。*/objs = document. getElementsByTagName (“ IMG");/*遍历IMG标签的对象集合*/for(i = 0 ;i < objs. length ;i+ = 1)
{/*根据客户端链接改写的正则表达式改写IMG标签后的src链接 */}/*获取FORM标签的对象集合。*/objs = document. getElementsByTagName(“ FORM");/*遍历FORM标签的对象集合*/for(i = 0 ;i < objs. length ;i+ = 1){/*根据客户端链接改写的正则表达式改写FORM标签后的action链 接*/}}〈/script〉步骤204,代理网关将所述执行代码插入到内网服务器响应的页面中,以及,在所 述页面中插入执行所述执行代码的调用信息;代理网关拼装完客户端链接改写的执行代码后,便将其插入到从内网服务器收到 的HTTP响应的HTML页面<html>标签后,并插入执行所述执行代码的调用信息,使客户端 根据所述调用信息执行所述执行代码,在本例中,即在客户端页面加载时,客户端根据所述 调用信息执行所述链接改写函数,本例中将其添加到<body>标签后,修改后标签内容如 下〈body onload = “ replace_link();‘‘ >在进行插入内容的同时,还需要记录插入内容的长度;步骤205,查找HTTP响应头,看是否有Content-Length头域,若有,则执行步骤 206,否则,执行207 ;步骤206,计算并修改Content-length头域值;本例中Content-Length头域值是1467,假设我们插入的客户端执行代码的长度 是100字节,那么就需要将Content-Length头域值修改为1567 ;步骤207,代理网关将插入客户端链接改写的执行代码的响应页面发送给客户端 浏览器;其中,发送的过程包括发送HTTP响应头、发送插入客户端链接改写的执行代码 的HTML页面内容、发送后续的HTML页面内容;在这里,代理网关无须缓存后续的HTML页面内容,直接将其发送即可;步骤208,客户端浏览器收到完整的HTTP响应后,在加载HTML页面的时候,根据所 述执行代码的调用信息就会自动执行客户端链接改写的执行代码,完成链接的改写工作;其中,链接的改写工作具体包括改写响应页面A标签后的href链接;改写响应页面Script标签后的src链接;改写响应页面Link标签后的href链接;
8
改写响应页面IMG标签后的src链接;改写响应页面Form标签后的action链接。上述实施例是以代理网关为例进行的描述,可以将代理网关替换成代理服务器, 其链接改写的具体实现方式与代理网关相同,此处不再赘述。当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟 悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变 形都应属于本发明所附的权利要求的保护范围。
9
权利要求
一种反向Web代理的链接改写方法,包括代理服务器或代理网关将客户端链接改写的执行代码插入到内网服务器的响应页面,发送给客户端;客户端执行所述执行代码,即进行了链接改写。
2.如权利要求1所述的链接改写方法,其特征在于,代理服务器或代理网关将执行代码插入到内网服务器的响应页面,发送给客户端的步 骤执行之前,还执行向内网服务器转发客户端发送的请求; 接收到内网服务器的响应; 拼装客户端链接改写的执行代码。
3.如权利要求2所述的链接改写方法,其特征在于,所述代理服务器或代理网关拼装客户端链接改写的执行代码的步骤具体包括 代理服务器或代理网关使用自身的地址拼装客户端链接改写的正则表达式; 根据正则表达式拼装链接改写的执行代码。
4.如权利要求3所述的链接改写方法,其特征在于,代理服务器或代理网关拼装客户端链接改写的正则表达式的步骤具体包括 拼装针对HTML页面中绝对路径的URL的正则表达式; 拼装针对HTML页面中相对路径的URL的正则表达式。
5.如权利要求3所述的链接改写方法,其特征在于, 所述执行代码使用链接改写函数表示。
6.如权利要求1所述的链接改写方法,其特征在于,代理服务器或代理网关将执行代码插入到内网服务器的响应页面,发送给客户端的步 骤具体包括将执行代码插入到内网服务器的响应页面; 在所述响应页面中插入执行所述执行代码的调用信息; 计算并修改Content-length头域值; 发送所述响应页面给客户端。
7.如权利要求6所述的链接改写方法,其特征在于, 发送所述响应页面给客户端的步骤具体包括 发送修改了 Content-length头域的HTTP响应头; 发送插入了客户端链接改写的执行代码的HTML页面内容; 发送后续的HTML页面内容。
8.如权利要求6所述的链接改写方法,其特征在于,所述客户端先加载所述响应页面,根据响应页面中的所述调用信息,执行所述执行代码。
9.如权利要求1所述的链接改写方法,其特征在于, 所述客户端执行所述执行代码的步骤具体包括 改写响应页面A标签后的href链接;改写响应页面Script标签后的src链接;改写响应页面Link标签后的href链接;改写响应页面IMG标签后的src链接;改写响应页面Form标签后的action链接。
10.如权利要求1 9所述的链接改写方法,其特征在于,所述执行代码为脚本。
全文摘要
本发明公开了一种反向Web代理的链接改写方法,包括代理服务器或代理网关将客户端链接改写的执行代码插入到内网服务器的响应页面,发送给客户端;客户端执行所述执行代码,即进行了链接改写。本发明与现有的反向Web代理的链接改写方法相比,代理服务器或代理网关的转发速度更快,链接改写占用的内存和CPU等资源更少。
文档编号H04L29/12GK101902485SQ20091008502
公开日2010年12月1日 申请日期2009年5月27日 优先权日2009年5月27日
发明者张博, 蒋磊 申请人:北京启明星辰信息技术股份有限公司;北京启明星辰信息安全技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1