版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明
2012-6-14 SamZhang 最近一直在做關于互聯(lián)網的一些事情,所以今天我想以互聯(lián)網用戶的角度看看互聯(lián)網協(xié)議是如何工作的,并對 HTTP 協(xié)議進行詳解,以便更好的理解網絡通信,為自己的互聯(lián)網小事業(yè)盡一份心意。 一、網絡通信依靠數(shù)據(jù)包的傳遞 數(shù)據(jù)傳遞是這樣的,一般由一臺電腦向另一臺遠程電腦發(fā)出請求數(shù)據(jù)包,而另一端的遠程電腦返回給這臺所請求的數(shù)據(jù)包,這樣就完成了一次網絡通信,網絡通信發(fā)送的數(shù)據(jù)包一般為如圖所示的格式。
http 協(xié)議詳解之 網絡通信數(shù)據(jù)包格式 我們先不管它是如何發(fā)送出去的,先讓我看看以太網表頭、 IP 標頭、 TCP 標頭以及應用層數(shù)據(jù)包(主要進行 HTTP 協(xié)議的詳解)里面到底是什么東西,下面我將使用 visual sniffer 工具解析下各個數(shù)據(jù)段的內容。下面開始訪問一個 www. 的網站,獲得了以下信息: GET / HTTP/1.1 Host: www. User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-cn,zh;q=0.5 Accept-Encoding: gzip, deflate Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7 Connection: keep-alive Cookie: CNZZDATA4158082=cnzz_eid=32769983-1337692276-&ntime=1339403774&cnzz_a=11&retime=1339403808613&sin=none …… 詳細解釋下: 1. 應用層數(shù)據(jù)包內容: 這個信息是 HTTP 協(xié)議部分的內容, HTTP 協(xié)議屬于應用層協(xié)議,即下圖所示部分內容;
http 協(xié)議詳解之應用層數(shù)據(jù)包內容 HTTP 是一個屬于應用層的面向對象的協(xié)議,由于它的簡單快速,被互聯(lián)網廣泛采用,目前使用的是 HTTP1.1 協(xié)議版本。 HTTP 協(xié)議詳解之 HTTP URL HTTP URL (URL 是一種特殊類型的 URI — Uniform Resource Identifier ,通用資源標志符,包含了用于查找某個資源的足夠的信息 ) 的格式如下: http://host[":"port][abs_path] http 表明用 HTTP 協(xié)議定位網絡資源; host 表明需要訪問的遠程 Internet 主機域名或者 IP 地址; port 是所訪問遠程主機的端口號,沒顯示的話則表明使用缺省端口 80 ; abs_path 指定了所要請求資源的 URI ;如果 URL 中沒有給出 abs_path ,那么當它作為請求 URI 時,必須以“ / ”的形式給出,通常這個工作瀏覽器自動幫我們完成。 eg: 1 )輸入: www. 瀏覽器自動轉換成: http://www./ 2 ) http:192.168.0.116:8080/default.asp HTTP 協(xié)議詳解之 HTTP 請求 http 請求有三部分組成:請求行、消息報頭、請求的正文 1 )“請求行”格式 : Method (請求方法)— Request URI (請求的地址)— HTTP Version ( http 協(xié)議版本)— CRLF (回車換行); 請求方法很多,列舉常用方法的解釋如下: GET :請求獲取 Request-URI 所標識的資源 POST :在 Request-URI 所標識的資源后附加新的數(shù)據(jù) HEAD :請求獲取由 Request-URI 所標識的資源的響應消息報頭 應用舉例: GET 方法:在瀏覽器的地址欄中輸入網址的方式訪問網頁時,瀏覽器采用 GET 方法向服務器獲取資源, eg: GET /themes/Discuz7/source/style.css.asp HTTP/1.1 (CRLF) POST 方法要求被請求服務器接受附在請求后面的數(shù)據(jù),常用于提交表單。 eg : POST /reg.asp HTTP/ (CRLF) Accept:image/gif,image/x-xbit,... (CRLF) ... HOST:www. (CRLF) Content-Length:22 (CRLF) Connection:Keep-Alive (CRLF) Cache-Control:no-cache (CRLF) (CRLF) // 該 CRLF 表示消息報頭已經結束,在此之前為消息報頭 user=jeffrey&pwd=1234 // 此行以下為提交的數(shù)據(jù) HEAD 方法與 GET 方法幾乎是一樣的,對于 HEAD 請求的回應部分來說,它的 HTTP 頭部中包含的信息與通過 GET 請求所得到的信息是相同的。 2 )“消息報頭”格式: HTTP 消息由客戶端到服務器的請求和服務器到客戶端的響應組成。請求消息和響應消息都是由開始行(對于請求消息,開始行就是請求行,對于響應消息,開始行就是狀態(tài)行),消息報頭(可選),空行(只有 CRLF 的行),消息正文(可選)組成。 HTTP 消息報頭包括普通報頭、請求報頭、響應報頭、實體報頭。 每一個報頭域都是由名字 + “:” + 空格 + 值 組成,消息報頭域的名字是大小寫無關的。 i .普通報頭 在普通報頭中,有少數(shù)報頭域用于所有的請求和響應消息,但并不用于被傳輸?shù)膶嶓w,只用于傳輸?shù)南ⅰ?/span> eg : Cache-Control 用于指定緩存指令,緩存指令是單向的。 請求時的緩存指令包括: no-cache (不能緩存)、 no-store 、 max-age 、 max-stale 、 min-fresh 、 only-if-cached; 響應時的緩存指令包括: public 、 private 、 no-cache 、 no-store 等。 Connection 普通報頭域允許發(fā)送指定連接的選項。例如指定連接是連續(xù),或者指定“ close ”選項,通知服務器,在響應完成后,關閉連接 ii .請求報頭 請求報頭允許客戶端向服務器端傳遞請求的附加信息以及客戶端自身的信息。 常用的請求報頭詳解如下: Host 報頭域(必需): Host 請求報頭域主要用于指定被請求資源的 Internet 主機和端口號,它通常從 HTTP URL 中提取出來的, eg : 我們在瀏覽器中輸入: http://www./ 瀏覽器發(fā)送的請求消息中,就會包含 Host 請求報頭域,如下: Host : www. 此處使用缺省端口號 80 ,若指定了端口號,則變成: Host : www.: 指定端口號 User-Agent 報頭域(非必需): 我們上網會看到一些歡迎信息,其中列出了你的操作系統(tǒng)的名稱和版本,你所使用的瀏覽器的名稱和版本,實際上,服務器應用程序就是從 User-Agent 這個請求報頭域中獲取到這些信息。這個報頭域是非必需的。 Accept 報頭域 Accept 請求報頭域用于指定客戶端接受哪些類型的信息。 eg : Accept : image/gif ,表明客戶端希望接受 GIF 圖象格式的資源; Accept : text/html ,表明客戶端希望接受 html 文本。 Accept-Charset 報頭域 Accept-Charset 請求報頭域用于指定客戶端接受的字符集。 eg : Accept-Charset:iso-8859-1,gb2312. 如果在請求消息中沒有設置這個域,缺省是任何字符集都可以接受。 Accept-Encoding 報頭域 Accept-Encoding 請求報頭域類似于 Accept ,但是它是用于指定可接受的內容編碼。 eg : Accept-Encoding:gzip.deflate. 如果請求消息中沒有設置這個域服務器假定客戶端對各種內容編碼都可以接受。 Accept-Language 報頭域 Accept-Language 請求報頭域類似于 Accept ,但是它是用于指定一種自然語言。 eg : Accept-Language:zh-cn. 如果請求消息中沒有設置這個報頭域,服務器假定客戶端對各種語言都可以接受。 iii .實體報頭(略) 3 )請求正文(略) 更深一步了解 HTTP 協(xié)議,可以查看 RFC2616 ,在 http://www./rfc 上找到該文件。 2. TCP 協(xié)議層內容: TCP 協(xié)議層內容包含了 TCP 標頭和應用層數(shù)據(jù)包,如下圖所示。
http 協(xié)議詳解之 TCP 協(xié)議層內容 TCP 數(shù)據(jù)包主要是設置發(fā)出方和接收方的端口號,像我們訪問 www. 的時候發(fā)出方用的是 4026 端口,接收方用的是 80 端口,如圖所示。
http 協(xié)議詳解之 TCP 設置端口號 3. IP 協(xié)議層內容: 將 TCP 協(xié)議層內容嵌入 IP 協(xié)議層之后就是 IP 數(shù)據(jù)包了,如圖所示。
http 協(xié)議詳解之 IP 數(shù)據(jù)包 IP 數(shù)據(jù)包包含了請求發(fā)出方和接收方的 IP 地址。 4. 以太網協(xié)議層內容: IP 數(shù)據(jù)包嵌入以太網協(xié)議層即為以太網數(shù)據(jù)包,就如本文開頭那張圖所示。因此,以太網標頭主要是設置發(fā)出方和接收方的 MAC 地址,即無力網卡地址。 現(xiàn)在終于明白了 HTTP 協(xié)議詳解的知識了。 |
|
來自: wlj2004 > 《http協(xié)議》