文:阿蜜果
日期:2009-11-30
HTTP的發(fā)展是萬(wàn)維網(wǎng)協(xié)會(huì)(World Wide Web Consortium)和Internet工作小組(Internet Engineering Task Force)合作的結(jié)果,(他們)最終發(fā)布了一系列的RFC,其中最著名的就是RFC 2616。RFC 2616定義了HTTP協(xié)議的我們今天普遍使用的一個(gè)版本——HTTP 1.1。
HTTP協(xié)議(HyperText Transfer Protocol,超文本傳輸協(xié)議)是用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。它可以使瀏覽器更加高效,使網(wǎng)絡(luò)傳輸減少。它不僅保證計(jì)算機(jī)正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內(nèi)容首先顯示(如文本先于圖形)等。
一次HTTP操作稱為一個(gè)事務(wù),其工作過(guò)程可分為四步:
1)首先客戶機(jī)與服務(wù)器需要建立連接。只要單擊某個(gè)超級(jí)鏈接,HTTP的工作開(kāi)始。
2)建立連接后,客戶機(jī)發(fā)送一個(gè)請(qǐng)求給服務(wù)器,請(qǐng)求方式的格式為:統(tǒng)一資源標(biāo)識(shí)符(URL)、協(xié)議版本號(hào),后邊是MIME信息包括請(qǐng)求修飾符、客戶機(jī)信息和可能的內(nèi)容。
3)服務(wù)器接到請(qǐng)求后,給予相應(yīng)的響應(yīng)信息,其格式為一個(gè)狀態(tài)行,包括信息的協(xié)議版本號(hào)、一個(gè)成功或錯(cuò)誤的代碼,后邊是MIME信息包括服務(wù)器信息、實(shí)體信息和可能的內(nèi)容。
4)客戶端接收服務(wù)器所返回的信息通過(guò)瀏覽器顯示在用戶的顯示屏上,然后客戶機(jī)與服務(wù)器斷開(kāi)連接。
如果在以上過(guò)程中的某一步出現(xiàn)錯(cuò)誤,那么產(chǎn)生錯(cuò)誤的信息將返回到客戶端,有顯示屏輸出。對(duì)于用戶來(lái)說(shuō),這些過(guò)程是由HTTP自己完成的,用戶只要用鼠標(biāo)點(diǎn)擊,等待信息顯示就可以了。
打開(kāi)Wireshark,選擇工具欄上的“Capture”->“Options”,界面選擇如圖1所示:
圖1 設(shè)置Capture選項(xiàng)
一般讀者只需要選擇最上邊的下拉框,選擇合適的Device,而后點(diǎn)擊“Capture Filter”,此處選擇的是“HTTP TCP port(80)”,選擇后點(diǎn)擊上圖的“Start”開(kāi)始抓包。
圖2 選擇Capture Filter
例如在瀏覽器中打開(kāi)http://image.baidu.com/,抓包如圖3所示:
http://image5.360doc.com/DownloadImg/2009/12/1/11192_10133313_3.jpg
圖3 抓包
在上圖中,可清晰的看到客戶端瀏覽器(ip為192.168.2.33)與服務(wù)器的交互過(guò)程:
1)No1:瀏覽器(192.168.2.33)向服務(wù)器(220.181.50.118)發(fā)出連接請(qǐng)求。此為TCP三次握手第一步,此時(shí)從圖中可以看出,為SYN,seq:X (x=0)
2)No2:服務(wù)器(220.181.50.118)回應(yīng)了瀏覽器(192.168.2.33)的請(qǐng)求,并要求確認(rèn),此時(shí)為:SYN,ACK,此時(shí)seq:y(y為0),ACK:x+1(為1)。此為三次握手的第二步;
3)No3:瀏覽器(192.168.2.33)回應(yīng)了服務(wù)器(220.181.50.118)的確認(rèn),連接成功。為:ACK,此時(shí)seq:x+1(為1),ACK:y+1(為1)。此為三次握手的第三步;
4)No4:瀏覽器(192.168.2.33)發(fā)出一個(gè)頁(yè)面HTTP請(qǐng)求;
5)No5:服務(wù)器(220.181.50.118)確認(rèn);
6)No6:服務(wù)器(220.181.50.118)發(fā)送數(shù)據(jù);
7)No7:客戶端瀏覽器(192.168.2.33)確認(rèn);
8)No14:客戶端(192.168.2.33)發(fā)出一個(gè)圖片HTTP請(qǐng)求;
9)No15:服務(wù)器(220.181.50.118)發(fā)送狀態(tài)響應(yīng)碼200 OK
……
每個(gè)頭域由一個(gè)域名,冒號(hào)(:)和域值三部分組成。域名是大小寫無(wú)關(guān)的,域值前可以添加任何數(shù)量的空格符,頭域可以被擴(kuò)展為多行,在每行開(kāi)始處,使用至少一個(gè)空格或制表符。
在抓包的圖中,No14點(diǎn)開(kāi)可看到如圖4所示:
http://image5.360doc.com/DownloadImg/2009/12/1/11192_10133313_4.jpg
圖4 http請(qǐng)求消息
回應(yīng)的消息如圖5所示:
圖5 http狀態(tài)響應(yīng)信息
Host頭域指定請(qǐng)求資源的Intenet主機(jī)和端口號(hào),必須表示請(qǐng)求url的原始服務(wù)器或網(wǎng)關(guān)的位置。HTTP/1.1請(qǐng)求必須包含主機(jī)頭域,否則系統(tǒng)會(huì)以400狀態(tài)碼返回。
圖5中host那行為:
Referer頭域允許客戶端指定請(qǐng)求uri的源資源地址,這可以允許服務(wù)器生成回退鏈表,可用來(lái)登陸、優(yōu)化cache等。他也允許廢除的或錯(cuò)誤的連接由于維護(hù)的目的被追蹤。如果請(qǐng)求的uri沒(méi)有自己的uri地址,Referer不能被發(fā)送。如果指定的是部分uri地址,則此地址應(yīng)該是一個(gè)相對(duì)地址。
在圖4中,Referer行的內(nèi)容為:
User-Agent頭域的內(nèi)容包含發(fā)出請(qǐng)求的用戶信息。
在圖4中,User-Agent行的內(nèi)容為:
http://www.blogjava.net/images/blogjava_net/amigoxie/40799/o_http%e5%8d%8f%e8%ae%ae%e5%ad%a6%e4%b9%a0-%e6%a6%82%e5%bf%b5-8.jpg
Cache-Control指定請(qǐng)求和響應(yīng)遵循的緩存機(jī)制。在請(qǐng)求消息或響應(yīng)消息中設(shè)置Cache-Control并不會(huì)修改另一個(gè)消息處理過(guò)程中的緩存處理過(guò)程。請(qǐng)求時(shí)的緩存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,響應(yīng)消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。
在圖5中的該頭域?yàn)椋?br>
Date頭域表示消息發(fā)送的時(shí)間,時(shí)間的描述格式由rfc822定義。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的時(shí)間表示世界標(biāo)準(zhǔn)時(shí),換算成本地時(shí)間,需要知道用戶所在的時(shí)區(qū)。
圖5中,該頭域如下圖所示:
100——客戶必須繼續(xù)發(fā)出請(qǐng)求
101——客戶要求服務(wù)器根據(jù)請(qǐng)求轉(zhuǎn)換HTTP協(xié)議版本
200——交易成功
201——提示知道新文件的URL
202——接受和處理、但處理未完成
203——返回信息不確定或不完整
204——請(qǐng)求收到,但返回信息為空
205——服務(wù)器完成了請(qǐng)求,用戶代理必須復(fù)位當(dāng)前已經(jīng)瀏覽過(guò)的文件
206——服務(wù)器已經(jīng)完成了部分用戶的GET請(qǐng)求
300——請(qǐng)求的資源可在多處得到
301——刪除請(qǐng)求數(shù)據(jù)
302——在其他地址發(fā)現(xiàn)了請(qǐng)求數(shù)據(jù)
303——建議客戶訪問(wèn)其他URL或訪問(wèn)方式
304——客戶端已經(jīng)執(zhí)行了GET,但文件未變化
305——請(qǐng)求的資源必須從服務(wù)器指定的地址得到
306——前一版本HTTP中使用的代碼,現(xiàn)行版本中不再使用
307——申明請(qǐng)求的資源臨時(shí)性刪除
400——錯(cuò)誤請(qǐng)求,如語(yǔ)法錯(cuò)誤
401——未授權(quán)
HTTP 401.1 - 未授權(quán):登錄失敗
HTTP 401.2 - 未授權(quán):服務(wù)器配置問(wèn)題導(dǎo)致登錄失敗
HTTP 401.3 - ACL 禁止訪問(wèn)資源
HTTP 401.4 - 未授權(quán):授權(quán)被篩選器拒絕
HTTP 401.5 - 未授權(quán):ISAPI 或 CGI 授權(quán)失敗
402——保留有效ChargeTo頭響應(yīng)
403——禁止訪問(wèn)
HTTP 403.1 禁止訪問(wèn):禁止可執(zhí)行訪問(wèn)
HTTP 403.2 - 禁止訪問(wèn):禁止讀訪問(wèn)
HTTP 403.3 - 禁止訪問(wèn):禁止寫訪問(wèn)
HTTP 403.4 - 禁止訪問(wèn):要求 SSL
HTTP 403.5 - 禁止訪問(wèn):要求 SSL 128
HTTP 403.6 - 禁止訪問(wèn):IP 地址被拒絕
HTTP 403.7 - 禁止訪問(wèn):要求客戶證書
HTTP 403.8 - 禁止訪問(wèn):禁止站點(diǎn)訪問(wèn)
HTTP 403.9 - 禁止訪問(wèn):連接的用戶過(guò)多
HTTP 403.10 - 禁止訪問(wèn):配置無(wú)效
HTTP 403.11 - 禁止訪問(wèn):密碼更改
HTTP 403.12 - 禁止訪問(wèn):映射器拒絕訪問(wèn)
HTTP 403.13 - 禁止訪問(wèn):客戶證書已被吊銷
HTTP 403.15 - 禁止訪問(wèn):客戶訪問(wèn)許可過(guò)多
HTTP 403.16 - 禁止訪問(wèn):客戶證書不可信或者無(wú)效
HTTP 403.17 - 禁止訪問(wèn):客戶證書已經(jīng)到期或者尚未生效
404——沒(méi)有發(fā)現(xiàn)文件、查詢或URl
405——用戶在Request-Line字段定義的方法不允許
406——根據(jù)用戶發(fā)送的Accept拖,請(qǐng)求資源不可訪問(wèn)
407——類似401,用戶必須首先在代理服務(wù)器上得到授權(quán)
408——客戶端沒(méi)有在用戶指定的餓時(shí)間內(nèi)完成請(qǐng)求
409——對(duì)當(dāng)前資源狀態(tài),請(qǐng)求不能完成
410——服務(wù)器上不再有此資源且無(wú)進(jìn)一步的參考地址
411——服務(wù)器拒絕用戶定義的Content-Length屬性請(qǐng)求
412——一個(gè)或多個(gè)請(qǐng)求頭字段在當(dāng)前請(qǐng)求中錯(cuò)誤
413——請(qǐng)求的資源大于服務(wù)器允許的大小
414——請(qǐng)求的資源URL長(zhǎng)于服務(wù)器允許的長(zhǎng)度
415——請(qǐng)求資源不支持請(qǐng)求項(xiàng)目格式
416——請(qǐng)求中包含Range請(qǐng)求頭字段,在當(dāng)前請(qǐng)求資源范圍內(nèi)沒(méi)有range指示值,請(qǐng)求也不包含If-Range請(qǐng)求頭字段
417——服務(wù)器不滿足請(qǐng)求Expect頭字段指定的期望值,如果是代理服務(wù)器,可能是下一級(jí)服務(wù)器不能滿足請(qǐng)求長(zhǎng)。
HTTP 500 - 內(nèi)部服務(wù)器錯(cuò)誤
HTTP 500.100 - 內(nèi)部服務(wù)器錯(cuò)誤 - ASP 錯(cuò)誤
HTTP 500-11 服務(wù)器關(guān)閉
HTTP 500-12 應(yīng)用程序重新啟動(dòng)
HTTP 500-13 - 服務(wù)器太忙
HTTP 500-14 - 應(yīng)用程序無(wú)效
HTTP 500-15 - 不允許請(qǐng)求 global.asa
Error 501 - 未實(shí)現(xiàn)
HTTP 502 - 網(wǎng)關(guān)錯(cuò)誤
《http_百度百科》:http://baike.baidu.com/view/9472.htm
《結(jié)果編碼和http狀態(tài)響應(yīng)碼》:http://blog.tieniu1980.cn/archives/377
《分析TCP的三次握手》:
《使用Wireshark來(lái)檢測(cè)一次HTTP連接過(guò)程》:
http://blog.163.com/wangbo_tester/blog/static/12806792120098174162288/
聯(lián)系客服