WEBServer工作原理及其應(yīng)用編程方法_第1頁
WEBServer工作原理及其應(yīng)用編程方法_第2頁
WEBServer工作原理及其應(yīng)用編程方法_第3頁
WEBServer工作原理及其應(yīng)用編程方法_第4頁
WEBServer工作原理及其應(yīng)用編程方法_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Cfgdemo項目分析Created by Qianyong-1 -Cfgdemo項目分析WEBWEB ServerServer 工作原理及其應(yīng)用編程方法說到 WEB Server ,就不能不提到 HTTP 協(xié)議HTTP 是 Hyper Text Transfer Protocol 的縮寫,中文譯稱超文本傳輸協(xié)議。它和 FTP 協(xié) 議一樣,都是基于 TCP 的應(yīng)用層協(xié)議,但它們服務(wù)器端使用的端口號不一樣:通常情況下,F(xiàn)TP 使用的端口號是 20 (數(shù)據(jù)鏈接)、21 (控制鏈接),而 HTTP 使用的端口號是 80。HTTP 協(xié)議是一個采用的請求/響應(yīng)模型的協(xié)議。 HTTP 協(xié)議最典型的應(yīng)用是在

2、 WEB 服務(wù)器和 WEB 瀏覽器之間傳遞數(shù)據(jù)。下面舉個例子來說明 WEB 瀏覽器和 WEB 服務(wù)器之間的交互過程:1)網(wǎng)絡(luò)環(huán)境附注:服務(wù)器端包括兩個文件:index.html 和 tibug.gif2)建立鏈接在 HTTP Client (WEB 瀏覽器 IE)和 HTTP Server (WEB 服務(wù)器)進(jìn)行數(shù)據(jù)傳遞的之前,需要在兩者之間建立一個TCP 鏈接,用于在兩者之間傳輸HTTP 報文。當(dāng)我們在IE的地址欄里輸入:4index.html并回車時, 可以用軟件sniffer 捕獲 H1 和 H2 之間的傳輸數(shù)據(jù)。在分析報文數(shù)據(jù)之前,我們先來分析一下它的

3、含義:http:/:代表超文本傳輸協(xié)議,一般情況下不用輸入(默認(rèn)的)4 :代表 WEB 服務(wù)器的地址(http:/已暗示服務(wù)器端端口號為 80)index.html :代表根目錄下的網(wǎng)頁文件因此這句話的含義就是獲取服務(wù)器上4:80 根目錄下的 index.html 文件。用 sniffer 捕獲到的前三個包分析結(jié)果如下:序號源端地址目的地址包內(nèi)容備注15:19034:80SYN同步24:805:1903SYN+ACK同步+應(yīng)答35:19031

4、4:80ACK應(yīng)答由此可見這三個 TCP 包是用來并成功地在 HTTP Client (臨時端口 1903)和 HTTP ServerCfgdemo項目分析Created by Qianyong-2 -(固定端口 80)之間建立一個 TCP 鏈接。3)提交獲取 index.html 文件的請求建立好鏈接之后,客戶端會向服務(wù)器端發(fā)一個HTTP 報文來請求獲取 index.html 文件,用sniffer 捕獲的結(jié)果如下:翌TCP:- TCP header-網(wǎng)TCP: TCP: Source port- 1303K TCP: Destination port= 8C (UWU/

5、WU-HTTP/HTTP) TCP: Sequence number- 6043E8S0STCP: Fest eKpected Seq number= 6043E3870Q TCP: Acknowledgment number = 12 332 635 39暨TCF: Data of fset= 20 bytesGET / HTTP/1 1Accept: imagegif,Q HTTP: 3: Accept-Language: zh-cnQ HTTP: 4: AcceptEncoding: gzip, def late HTTF: 5: UserAgent: Mozilla4.0B HTTP:

6、 6: Host: 192 168.1.54Q HTTP: 7: Connection: Keep-AliveB HTTP: 8:B HTTP:從該報文的 TCP 報頭可知該 HTTP 報文大小為 364 字節(jié),從 HTTP 報頭可以看出該 HTTP 報文僅僅含有 HTTP 包頭,而沒有數(shù)據(jù)。HTTP 報頭分為 8 行,每行以回車-換行符(CRLF 一 rn)結(jié)束。其中第一行稱為 Request-Line , HTTP 協(xié)議為它定義了一個具體的語法格式:MethodMethod Request-URIRequest-URI HTTP/1.1HTTP/1.1 CRLFCRLF這里,Method=

7、GET、Request-RUI=/index.html (/和/index.html 一樣),服務(wù)器端處理這樣的 Request-Line 時會解釋為客戶端請求獲取服務(wù)器根目錄下的index.html 文件。第 2-7 行一起稱為一個 Header,其中每一行稱為一個頭域,每一個頭域又由域名、冒號和域值三個部分組成,它們是用來告訴服務(wù)器一些與客戶端相關(guān)的信息,讓服務(wù)器據(jù)此來做一些決策。最后一行由回車-換行符組成。接下來,我應(yīng)該注意到 TCP 包頭中 PUSH 位置 1 了,表示客戶端要求服務(wù)器端盡快把 這個包交給應(yīng)用7 T IP D=l?2 168 1 . 54 S1S5 L

8、EK=38 4 ID=S713S TCFReserved Bi ts:Reservedfor Future Use曾TCP:F Lags=IE TCP:ll= (No urgent pointer)Q -=Acknow 1 edgsi en tQ TCP :=Push TCP:.pQ _=(Nc reset) TCP:口=(No SYN)=(No FIN) TCP:Uindcw=65535ATCP:Checksum=90C4 (correct)號TCP :Urgent pointer=0S TCP:No TCP options0TCP:364 Bytes ofdata島TCP:E HTTP:

9、- Hypertext Transfer ProtocolB HTTP:HTTP: 1 :HTTP: 2:Cfgdemo項目分析Created by Qianyong-3 -層, 這時,服務(wù)器端向客戶端發(fā)送一個應(yīng)答, 表示服務(wù)器端已經(jīng)這個報文交 給了應(yīng)用層去處理。用sniffer捕獲到的前三個包分析結(jié)果如下:序號源端地址目的地址包內(nèi)容備注Cfgdemo項目分析Created by Qianyong-4 -54:805:1903ACK應(yīng)答4)獲取 index.html 文件接下來服務(wù)器端就向客戶端傳輸index.html 文件。由于 index.htm

10、l 文件的大小為 3078 字節(jié),而 TCP 包最大的數(shù)據(jù)容量也就 1460 (1460=1500-20-20 , HTTP 包的最大數(shù)據(jù)容量比 1460 還要小,因為還要扣除 HTTP 包頭),因此,要分多個 TCP 包才能完成此文件的傳輸。使用 sniffer 捕獲的結(jié)果如下(只截取了HTTP 包頭部分):Vector Off set Length Frajie00 x00361460610 x0036 1460720 x0036436S33S6 bytes of re-assenbled data.- Hyper tex t- Transf er Protocol-1: HTTP/1 1

11、 200 OK2: Date: Ved, 20 Oct 2004 03:04:41 GMT3: Server: Apache/2.0.40 (Red Hat Linux)4: Last-Modified; Tue, 19 Oct 2004 03 : 42 : 05 GMTS: ETag:,15ea3f-c06-de2 5dl4O,6: Accept-Ranges: bytes7: Content-Length: 30788 : Connect-ion : close9: Con tent-Type : text/htiul, char se t = ISO-8B59-l10:服務(wù)器端的數(shù)據(jù)是分

12、三次傳送到客戶端的,TCP 協(xié)議傳送的數(shù)據(jù)字節(jié)數(shù)為 3356 (3356=1460+1460+436) , HTTP 報文數(shù)據(jù)的字節(jié)數(shù)為 3078(Content-Length )。 這 里面, 為什么 TCP 協(xié)議傳送的數(shù)據(jù)字節(jié)數(shù)比 HTTP 協(xié)議傳送的數(shù)據(jù)字節(jié)數(shù)要多 278呢?這是由 于第一個 TCP 報文數(shù)據(jù)里包含了 278 個字節(jié)的 HTTP 報頭,也就是上圖標(biāo)有行號的 1-10 共十一 行數(shù)據(jù)。 這里的 HTTP 報頭稱為 Full-Response 報頭, 分為 11 行。 其中第一行成為 Response-Line,HTTP 協(xié)議為它定義了一個具體的語法格式:HTTP/1.1HT

13、TP/1.1 Status-CodeStatus-Code Reason-PhraseReason-Phrase CRLFCRLF這里,Status-Code=200, Reason-Phrase=OK”,客戶端處理這樣的 Response-Line 時會解釋為服務(wù)器端正確響應(yīng)了客戶的請求。第2-9 行一起稱為一個 Header,其中每一行稱為一個頭域,每一個頭域又由域名、冒號和域值三個部分組成。它們是用來告訴客戶器一些相關(guān)的 信息,譬如:服務(wù)器端響應(yīng)客戶端的數(shù)據(jù)長度由Content-Length: 3078 ”頭域表示;接收完數(shù)據(jù)之后是否關(guān)閉該 TCP 鏈接由Connection: clos

14、e”表示;傳送的數(shù)據(jù)格式由Content- Type:text/html ”表示等。最后一行由回車 -換行符組成。至此,index.html 文件就傳送到客戶端,并由客戶端的IE 瀏覽器進(jìn)行解釋顯示了。5)關(guān)閉鏈接我們再來看看第 4)步中 3 個 TCP 報文中的最后一個,用 sniffer 捕獲并分析,結(jié)果如下(僅 分析TCP 包頭):曲HTTP HTTP:A HTTPHTTPHTTP:Q HTTP:Q HTTPQ HTTP:HTTP:S HTTP QHTTP:HTTP四HTTP QHTTP:9 HTTP QHTTP:口HTTP SHTTP SHTTP:從這里可以看出,Cfgdemo項目分析

15、Created by Qianyong-5 -這里看出 Push 和 FIN 位都置上了 1,表示服務(wù)器端要求客戶端盡快把這個包提交給應(yīng)用層(Push)并斷開這個 TCP 鏈接(FIN)??蛻舳俗鞒鰬?yīng)響應(yīng)并配合斷開這個鏈接。用 sniffer捕獲到的前三個包分析結(jié)果如下:序號源端地址目的地址包內(nèi)容備注95:19034:80ACK應(yīng)答105:19034:80FIN斷開114:805:1903ACK應(yīng)答至此,一次完整的 TCP 鏈接的建立HTTP 請求 HTTP 響應(yīng)

16、 TCP 鏈接的斷開過程就完成了。6) IMG 標(biāo)號的處理當(dāng)客戶端 IE 瀏覽器解釋并顯示 index.html 文件時,會發(fā)現(xiàn)里面有這樣一條語句:IMGwidth=236它表示該 index.html 文件中插入了一個名為 tibug.gif 的圖形文件,顯示寬度位 236 個象素, 同時也告知了該文件位于 WEB 服務(wù)器的根目錄下。但是在前面的傳輸過程中并沒有把該文 件傳輸?shù)娇蛻舳?,所?IE 瀏覽器為了能完整的顯示 index.html 文件,就必須得重新建立 TCP 鏈接,通過 HTTP 協(xié)議把該文件傳過來。其過程同獲取 index.html 文件的過程基本相同。用 sniffer 捕

17、獲到并分析,其結(jié)果如下:序號源端地址目的地址包內(nèi)容備注125:19044:80SYN同步134:805:1904SYN+ACK同步+應(yīng)答145:19044:80ACK應(yīng)答155:19044:80PUSH+HIIPHTTP請求164:805:1904ACK應(yīng)答174:805:1904HTTPHIIP 響應(yīng)184:8

18、05:1904PUSH+HMPHIIP 響應(yīng)194:805:1904FIN+ACK斷開+應(yīng)答TCP header -P TalslsalQalQQl目alaalQ- -P PPTCSource portBest ination portSequence number=80 (WVV/UUW-HTTP/HTTF)=1903=1233266519Nest expected Seq number- 1233266956=6014358670=20 bytes for FutureUse =19Acknow1edgmen t numbe

19、r DataoffsetReserved Bits: Reserved F Lags.0一.0 .WindowChecksumUrgent pointerNo TCP options 436 Bytes ofdata(No urgent pointerAcknowledgment Push(No reset)(No SYN) FIN 6432 2527(correct) 0Cfgdemo項目分析Created by Qianyong-6 -205:19044:80ACK應(yīng)答Cfgdemo項目分析Created by Qianyong-7 -21192

20、.168.1.55:19044:80FIN斷開224:805:1904ACK應(yīng)答至此,index.html 就可以完整的顯示出來了。7) CGI 程序IE 瀏覽器顯示出 index.html 文件后(顯示結(jié)果如下圖所示),我們可以看到有兩個按鈕: ViewConfiguration和Change Password,客戶端可以通過單擊該按鈕來向服務(wù)器端提交客 戶輸入的信息。下面我們來分析后者-更改用戶密碼-的實現(xiàn)過程。ChangeChange UserUser PasswordPassword: :To change the co

21、nfiguration password enter the oldpassword and the new password in the spaces below.我們在 User Password 文本框中輸入 CONFIG (默認(rèn)密碼),在 Enter New Password 文本 框中輸入 QIANYONG 作為新密碼,再在 Re-Type New Password 文本框中輸入 QIANYONG 進(jìn) 行確認(rèn),然后點擊Change Password按鈕,這樣客戶端就完成了密碼修改工作。下面用 sniffer捕獲這個過程的交互過程。首先要在客戶端和服務(wù)器端建立一個TCP 鏈接,用來進(jìn)

22、行 HTTP 協(xié)議的傳輸,所以用sniffer 捕獲的前三個包分析結(jié)果如下:序號源端地址目的地址包內(nèi)容備注235:19054:80SYN同步244:805:1905SYN+ACK同步+應(yīng)答255:19054:80ACK應(yīng)答接著用 sniffer 捕獲的包如下(這里只截取了 HTTP 報文部分)甑HTTP - Hypertext Transfer Protocol -HTTP:HTTP:1:POST zcf gpass ogi HTTP/1.1HTTP2:Accep

23、t: iniagegif , image/x-xbi tmap, image/jpegHTTP:3 : Referar : http:Z/LS 4/HTTP:4: Accept -Lengviage: z hcnHTTP5:Content-Type: application/K-vvw-torm-ur1encodedHTTP:6:Accept -Encoding: gzip, deflateHTTP:7:UserAgent: MozxLla/4.0HTTP8 : Host: 192.163.1 54HTTP:9 : ContentLength: 51HTTP10:Connec

24、tion: Keep-AliveHTTP: 11:Cache-Control: no-cacheHTTP:12 :HTTP:HTTP:13 : Content: (51 bytes ct data)從這里可以看出,HTTP 報文由兩部分組成:1-12 行表示的 HTTP 報頭,13 行表示的的HTTP 報文數(shù)據(jù)(51 字節(jié))。報頭的第一行是一個Request-Line ,如前所述,HTTP 協(xié)議為它Cfgdemo項目分析Created by Qianyong-8 -定義了一個具體的語法格式:MethodMethod Request-URIRequest-URI HTTP/1.1HTTP/1.1

25、 CRLFCRLF這里,Method = POST、Request-RUI=/cgfpass.cgi ,其中 POST 表示客戶端要向服務(wù)器端 提交長度為 Content-Length 的數(shù)據(jù),/cfgpass.cgi 表示提交的數(shù)據(jù)要交由服務(wù)器端根目下的名 為 cfgpass的 CGI 程序來處理。因此,服務(wù)器端接收到這樣的一個Request-Line 后會解釋為客戶端請求服務(wù)器調(diào)用根目錄下的名為cfgpass 的 CGI 程序來處理以 HTTP 協(xié)議傳輸?shù)膱笪臄?shù)據(jù)。2-11 行稱為 Header,它們是用來告訴服務(wù)器一些相關(guān)的信息。12 行為一個回車-換行符。接下來的就是 51 字節(jié)的 H

26、TTP 報文數(shù)據(jù):password=CONFIG&passnew1=QIANYONG&passnew2=QIANYONGpassword=CONFIG&passnew1=QIANYONG&passnew2=QIANYONG大家可以看出 CONFIG、 QIANYONG、 QIANYONG 是由客戶端輸入的。 那么為什么點 擊 Change Password會產(chǎn)生這樣的報文數(shù)據(jù)呢?這與 IE 瀏覽器以及 html 文件有關(guān)。我們看 index.html 文件中如下一段代碼:FORMmethod=postFONTChangesize=+1Change UserUse

27、r Password:Password: ToTo changechange thetheconfigurationconfiguration password,password, enterenter thethe oldold password,password, andand thethe newnew passwordpassword inin thethe spacesspaces below.below.TABLE TDbgColor=#f0f0f0 UserUser Password:Password: EnterEnter NewNewPassword:Password: Re

28、-TypeRe-TypeNewNew Password:Password: INPUTPassword 如果你了解 HTML 語言的話,那么不難理解上面這段用HTML 語言寫程序,其中關(guān)鍵部分我用紅色自己標(biāo)識出來。FORM 的 action 屬性指定了 Request-Line 中的 Request-URI 為cfgpass.cgimethod 屬性指定了 Request-Line 中的 Method 為 POST。FROM 中的 INPUT 的 name 屬性指定了要提交的數(shù)據(jù)的域名為password、passnew* passnew2,客戶端用戶輸入的數(shù)據(jù)稱為域值,與其對應(yīng)的域名一起構(gòu)成一

29、個域。當(dāng)點擊 type=submit 類型的按鈕時,瀏覽器會將這些域按照一定的格式、通過HTTP 協(xié)議發(fā)到服務(wù)器端。格式規(guī)定如下:1)各個域用&分隔:域 1&域 22)在每個域中,用=分隔域名和域值:域名=域值3)一個域中的空格需轉(zhuǎn)換為+ :I love you I+love+you4)其他特定的鍵盤字符被編號為 十六進(jìn)制值:!%21 ( 0 x25 0 x32 0 x31 )知道這些格式規(guī)定以后,我們就應(yīng)該能夠很好地理解cfgdem。項目中函數(shù) cgiParseVars的源代碼。Cfgdemo項目分析Created by Qianyong-9 -NDK 對 CGI 程序的接口

30、有一個統(tǒng)一的規(guī)定:int cgi_xxx (int htmlSock, int ContentLength, char *pArg )其中參數(shù) htmlSock 是一個套接字,CGI 程序可以利用該套接字和客戶端進(jìn)行通信。參數(shù)ContentLength 指定了 CGI 程序需要處理的 HTTP 報文數(shù)據(jù)的長度。參數(shù) pArg 指向一個以、0 結(jié)束的字符串。 當(dāng) Method=POST 時, CGI 程序應(yīng)該調(diào)用 recv 從該套接字 htmlSock 上接收長度 為 ContentLength的 HTTP 報文數(shù)據(jù),當(dāng) Method=GET 時,CGI 不需調(diào)用 recv 去從套接字 htmlSock 上接收 HTTP 報文數(shù)據(jù),此時 CGI 需要處理的數(shù)據(jù)在 pArg 指向的字符串中。因此編寫 CGI 程序的流程如下:1)首先,CGI 程序需要判斷字符串指針 pArg 指向的字符串是否為 NULL :如果是,那么要處理的是一個 POST 方法,如果不是,那么要處理的是一個GET 方法;2)如果 CGI 程序要處理的是 POST 方法,那么按下列步驟編寫程序:a)動態(tài)分配字節(jié)數(shù)為 ContentLength+1 的緩沖區(qū);

溫馨提示

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

評論

0/150

提交評論