HTTP代理服務(wù)器在Windows下的實(shí)現(xiàn)_第1頁(yè)
HTTP代理服務(wù)器在Windows下的實(shí)現(xiàn)_第2頁(yè)
HTTP代理服務(wù)器在Windows下的實(shí)現(xiàn)_第3頁(yè)
HTTP代理服務(wù)器在Windows下的實(shí)現(xiàn)_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、HTTP代理服務(wù)器在Windows下的實(shí)現(xiàn)摘耍:本文介紹了代理服務(wù)器的優(yōu)點(diǎn),HTTP代理服務(wù)器在Windows卜的實(shí)現(xiàn),最后 簡(jiǎn)單討論實(shí)現(xiàn)代理服務(wù)器的意義。關(guān)鍵字:代理服務(wù)器(proxy)、HTTP、Windows、線程普通的因特網(wǎng)訪問是一個(gè)典型的客戸朗1/服務(wù)器(Client/Server)結(jié)構(gòu):用戶本地計(jì)算機(jī) 上的客門端程庁如瀏覽器發(fā)生請(qǐng)求,遠(yuǎn)端WWW服務(wù)器程序響應(yīng)請(qǐng)求并捉供相應(yīng)的數(shù)據(jù)。 而代理(Proxy)處于客戶機(jī)和服務(wù)器之間,對(duì)丁服務(wù)器來說,Proxy是客戶機(jī),提出請(qǐng)求: 對(duì)于客戶機(jī)來說,Proxy是服務(wù)器,它接受請(qǐng)求并提供數(shù)據(jù)。代理服務(wù)器模電代理服務(wù)器具有以卜兒個(gè)的優(yōu)點(diǎn):(一)安全

2、屏障Proxy是建立在應(yīng)用層的軟件,它的最主耍功能是作為firewall的旋要組成部分,為它保 護(hù)的主機(jī)起到了安全屏障的作用。Proxy起到流帚控制,包過濾,訪問控制,和操作系統(tǒng)用 八集成等作用,所以Proxy町以成為簡(jiǎn)單網(wǎng)絡(luò)管理軟件的核心部分,同時(shí)它也是屮小型企業(yè) INTERNER訪問解決方案的重要組成部分。(二)提高網(wǎng)絡(luò)性能當(dāng)Internet的用戶以指數(shù)函數(shù)增長(zhǎng)時(shí),網(wǎng)絡(luò)的擁擠是網(wǎng)絡(luò)管理的一個(gè)幣:耍問題。Proxy Server 就好像一個(gè)人儲(chǔ)藏庫(kù),它仃很人的Cache空何。如來通過該P(yáng)roxy何人左過了某個(gè)站點(diǎn),傳 輸了某此內(nèi)容,那么Proxy會(huì)將相關(guān)的資料(包含文字、圖型、多媒體)備份一

3、份在Proxy Server屮。為用戶再要通過該P(yáng)roxy訪問相同地址時(shí),可直接從Cache屮獲得數(shù)據(jù)。一個(gè)仃 效的Proxy服務(wù)器將叮能將90%的用帚控制在Proxy服務(wù)器Z 2所以不僅用戶的訪問速度 將會(huì)提高,網(wǎng)絡(luò)的擁擠狀況也將會(huì)人人改觀。(三)多機(jī)共享一個(gè)IP地址當(dāng)一個(gè)局域網(wǎng)只有一個(gè)IP時(shí),就可以在服務(wù)器上安裝Proxy,帑個(gè)局域網(wǎng)的用戶就町通過一 個(gè)IP訪問Internet 了,這樣將會(huì)給局域網(wǎng)用戶節(jié)省人鼠申請(qǐng)IP的費(fèi)用。WWW代理服務(wù)器包括主耍代理gopher, http, ftp, Tclncl等幾種服務(wù),乞種代理服務(wù) 的幕木工作原理是相同的。HTTP代理服務(wù)器是WWW代理服務(wù)器的

4、一個(gè)最朿要的組成部 分,同時(shí)HTTP的代理服務(wù)器的實(shí)現(xiàn)比較簡(jiǎn)單,因此在這里以它為樣本介紹Windows卜的 代理服務(wù)器的實(shí)現(xiàn)方法。本文只介紹的代理服務(wù)器數(shù)據(jù)包轉(zhuǎn)發(fā)的實(shí)現(xiàn)方法,111 J" Cache的處 理比較復(fù)雜,所以本文不對(duì)苴進(jìn)行討論。1、Brower通過proxy訪問Web Server頭文件的數(shù)據(jù)賂式111 丁不町能在此解釋HTTP協(xié)議,所以只給出/簡(jiǎn)單的數(shù)據(jù)格式的例子: 動(dòng)作:Brower 獲得 hg:/202.196.4&9/indcx.htmBrower發(fā)送到proxy的數(shù)據(jù):Get http:202 196.4&9/index.htm HTTP/1.0

5、Accept: */*Acccpt-Languagc: zh-cnAcceptEncoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)Host: 202.196.4&9Proxy-Connection: Keep-AliveServer返回proxy的數(shù)據(jù)頭HTTP/1.0 200 OKServer: Microsoft-IIS/2.0Date: Thu. 02 Sep 1999 09:45:42 GMTContent-Type: text/htmlAccept-Ranges:

6、bytesLast-Modified: Wed. 25 Aug 1999 00:10:35 GMTContent-Length: 26402 2、HTTP代理服務(wù)器的建立過程:1) Proxy啟動(dòng)監(jiān)聽Brower的連接審請(qǐng)2) Proxy接受Brower的申請(qǐng),Brower向Proxy發(fā)數(shù)據(jù)3) Proxy解析Brower發(fā)的數(shù)據(jù),確定服務(wù)類型(HTTP),服務(wù)器地址和服務(wù)端口號(hào)4) Proxy連接服務(wù)器5) Proxy 啟動(dòng) B_P_S (bro we r to proxy to server)線程,該線程負(fù) jJi Brower 把數(shù)據(jù)傳到 Proxy» 再由 Proxy 傳到

7、Server6) B_P_S啟動(dòng)S_P_B (Server to Proxy to Brower)線程,該線程負(fù)責(zé)Server把數(shù)據(jù)傳到 Proxy,再由 Proxy 傳到 Client7) 傳輸完畢結(jié)束B_P_S線程和S_P_B線程8) 循環(huán)啟動(dòng)線程,直到所有傳輸完成BrowerProxyServerV2.連接上,發(fā)數(shù)據(jù)一1.監(jiān)聽1tI:i1初始化Brower.Proxy Socket 3 .解析>4.連接服務(wù)器5啟動(dòng)線程數(shù)據(jù)?Proxy.Server Socket1數(shù)據(jù)接收一i發(fā)送-B_P_S線程1Brower_Proxy Socket1JProxy.Server Socket發(fā)送-

8、接收數(shù)據(jù)S_P_B線程Brower_Proxy Socket. . 2. MB»i : “aProxy.Server SocketHTTP代理服務(wù)器的建立過程3、程序框架結(jié)構(gòu)HTTP協(xié)議是各部分單獨(dú)連接傳送的,Web頁(yè)面屮的每個(gè)文本,圖片都是作為獨(dú)立單元 傳送的,為了提高Proxy的效率防止主程序阻塞,特意啟動(dòng)三級(jí)線程。并線程Z間的關(guān)系主線程在Proxy端I 1監(jiān)聽Brower的申請(qǐng),然后啟動(dòng)B_P_S線程;B_P_S線程負(fù)貞接受 每個(gè)Brower的川請(qǐng)(每個(gè)B_P_S都是獨(dú)立的),在完成Brower到Server單向數(shù)據(jù)傳送的同 時(shí)啟動(dòng)S_P_B線程,然后由S_P_S線程完成Ser

9、ver到Brower的單向數(shù)據(jù)傳送。由篇幅 所限,本文將簡(jiǎn)耍介紹B發(fā)給P的數(shù)據(jù)分析函數(shù)、B_P_S線程函數(shù)和S_P_B線程函數(shù)(I)B發(fā)給P的數(shù)據(jù)分析這部分的主要功能是分析B發(fā)給P的數(shù)據(jù),確定服務(wù)類型和服務(wù)器相關(guān)信息??蛻魴C(jī)向服務(wù)器申請(qǐng)接受HTTP數(shù)據(jù),它發(fā)出的HTTP命令格式第一行一般是:命令-URL-協(xié)議,例如上文提到的:Get (命令)hg:/202.196.4&9/indcx.hlm (URL) HTTP/1.0 (協(xié)議)Proxy程序需要通過查找“URL”屮的“hltp:/”串確定是否是HTTP服務(wù),從URL部分中 解析到Web服務(wù)器的地址,作為Proxy連接的H的地址。同時(shí)

10、將“hllp:/服務(wù)器地址”部分 從URL部分剔除,這樣可以避免某些Web服務(wù)器重定向URL。int Get Address A ndPort( char * str. char *address. int * port)讀出"Gel”、"hUD:20296.4&9/indcx.hlm” 和 “HTTP1.0"分別存入 s_Cmd, s_Server, s_Pro在s_Pro中査找“hup:/”如果沒冇找到,則表示lb HTTP服務(wù),返冋1 /*port=80 HTTP 缺省端口從 s_Server «|«解析地址 “202.196.4

11、&9” 存入*str把*sir 屮的服務(wù)器地址去掉,即"Get hie:/20296.4&9/indcx.hlm HTTP 1.0” e “Gel /indcx.htmHTTPl.O”,返回 1(II)B_P_S 線程這部分的功能是:Brower把數(shù)據(jù)傳到Proxy,再由Proxy把數(shù)據(jù)傳到Server。B_P_S線程由主線程心動(dòng),在整個(gè)Proxy程序中負(fù)貞協(xié)調(diào)該線程心動(dòng)并同步S_P_B線 ®o該線程在Accept Brower以后,復(fù)制門(2,因?yàn)锳ccept函數(shù)是阻塞的,在沒仃收到Brower 的連接巾請(qǐng)時(shí)會(huì)阻屣,所以同時(shí)最多只冇一個(gè)空閑(處F Acce

12、pt阻塞狀態(tài))的線程。UINT B_P_S(LPVOID pParm)/Accept Brower的連接申請(qǐng)/AfxBeginThrcad(B_P_S)重新啟動(dòng)-個(gè) B_P_S 線程收到一塊Brower發(fā)送的數(shù)據(jù)/ GetAddressAndPort分析數(shù)據(jù)并去掉數(shù)據(jù)中的服務(wù)器地址啟動(dòng)S_P_B線程等待60秒或S_P_B線程連接上服務(wù)器/ Brower把數(shù)據(jù)傳到Proxy,再由Proxy傳到Server,循壞肖到數(shù)據(jù)傳輸完畢等待S_P_B線程結(jié)束。因?yàn)锽_P_S是線程S_P_B的父線程,所以在S_P_B結(jié)束以前B_P_S 不能提前結(jié)束(III) S_P_B這部分的主要功能是:Server把數(shù)據(jù)

13、傳到Proxy,再由Proxy傳到ClientS_P_B線程由B_P_S線程啟動(dòng),是B_P_S的子線程。不把S_P_B線程介入B_P_S線 榨的原因是,S_P_B線程仃一個(gè)阻瘙的連接遠(yuǎn)端服務(wù)器的connect動(dòng)作,當(dāng)網(wǎng)絡(luò)傳輸條件較 差時(shí),該動(dòng)作會(huì)占用很多時(shí)間,其至使程序無法控制,是在B_P_S屮加入時(shí)間控制以保 證程序正常運(yùn)行。S_P_B相對(duì)簡(jiǎn)單一些,但是由于它與遠(yuǎn)端服務(wù)器連接,所以一定要注意借 謀與例外的處理,本文僅介紹程序流程,錯(cuò)誤與例外的處理請(qǐng)參考相關(guān)資料UINT S_P_B(LPVO1D pParm)解析服務(wù)器的域名新建socket并連接到服務(wù)器/ Server把數(shù)據(jù)傳到Proxy,再宙Proxy傳到Brower,循環(huán)1工到數(shù)據(jù)傳輸完畢/返回從以上的程丿了; »J'以看出,Proxy是Brower Wj問Server的屮介,它nJ以監(jiān)控Brower發(fā)11的所 仃的HTTP數(shù)據(jù)包,對(duì)這些數(shù)據(jù)包進(jìn)行阻塞,轉(zhuǎn)發(fā)和流屆記錄。同時(shí),它也町以監(jiān)控Server 發(fā)出的所有的HTTP數(shù)據(jù)包,對(duì)這些數(shù)據(jù)包進(jìn)行阻窘,轉(zhuǎn)發(fā)和流杲記錄。對(duì)Browser而言,在HTTP服務(wù)上是連通的,但是在IP層卻不通;然而對(duì)Server而言,它 看到的只是一個(gè)IP節(jié)點(diǎn)。在Internet環(huán)境看,這是一個(gè)單向的數(shù)據(jù)傳輸模式。所冇這些

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論