yxhxj2006

          常用鏈接

          統計

          最新評論

          HTTP 協議簡介

          一、TCP/IP 協議介紹

            在介紹 HTTP 協議之前,先簡單說一下TCP/IP協議的相關內容。TCP/IP協議是分層的,從底層至應用層分別為:物理層、鏈路層、網絡層、傳輸層和應用層,如下圖所示:

           

           

          TCP/IP基礎--層次圖

           

            從應用層至物理層,數據是一層層封裝,封裝的方式一般都是在原有數據的前面加一個數據控制頭,數據封裝格式如下:

           

          TCP/IP基礎--數據封裝

           

            其中,對于TCP傳輸協議,客戶端在于服務器建立連接前需要經過TCP三層握手,過程如下:

           

          TCP/IP基礎--TCP三次握手

           

          二、HTTP協議

          2.1 簡介

            超文本傳輸協議(Hypertext Transfer Protocol,簡稱HTTP)是應用層協議,自 1990 年起,HTTP 就已經被應用于 WWW 全球信息服務系統。
            HTTP 是一種請求/響應式的協議。一個客戶機與服務器建立連接后,發送一個請求給服務器;服務器接到請求后,給予相應的響應信息。
            HTTP 的第一版本 HTTP/0.9是一種簡單的用于網絡間原始數據傳輸的協議;
            HTTP/1.0由 RFC 1945 定義 ,在原 HTTP/0.9 的基礎上,有了進一步的改進,允許消息以類 MIME 信息格式存 在,包括請求/響應范式中的已傳輸數據和修飾符等方面的信息;
            HTTP/1.1(RFC2616) 的要求更加嚴格以確保服務的可靠性,增強了在HTTP/1.0 沒有充分考慮到分層代理服務器、高速緩沖存儲器、持久連接需求或虛擬主機等方面的效能;
            安全增強版的 HTTP (即S-HTTP或HTTPS),則是HTTP協議與安全套接口層(SSL)的結合,使HTTP的協議數據在傳輸過程中更加安全。

           

          2.2 協議結構

            HTTP協議格式也比較簡單,格式如下:

           

           

          HTTP協議--協議結構

           

          2.3 HTTP 協議舉例

            下面是一個HTTP請求及響應的例子:

           

          2.4 請求頭格式

          a) 通用頭(general-header):
          Cache-Control:客戶端希望服務端如何緩存自己的請求數據,如"Cache-Control: no-cache","Cache-Control: max-age=0";
          Connection:客戶端是否希望與服務端之間保持長連接,如"Connection: close", "Connection: keep-alive";
          Date:只有當請求方法為POST或PUT方法時客戶端才可能會有些字段;
          Pragma:包含了客戶端一些特殊請求信息,如 "Pragma: no-cache" 客戶端希望代理或應用服務器不應緩存與該請求相關的結果數據;
          Via:一般用在代理網關向應用服務器發送的請求頭中,表明該來自客戶端的請求經過了網關代理,
               格式為:"Via: 請求協議版本 網關標識   [其它信息] ",
               如 :" Via: 1.1  webcache_250_199.hexun.com:80 (squid)"

           

          b) 請求頭(request-header):
          Accept:表明客戶同端可接受的請求回應的媒體類型范圍列表。星號“*”用于按范圍將類型分組,用“*/*”指示可接受全部類型;用“type/*”指示可接受 type類型的所有子類型,如“ Accept: image/gif, image/jpeg, */*”;
          Accept-Charset:客戶端所能識別的字符集編碼格式,格式:“Accept-Charset: 字符集1[:權重],字符集2[:權重]”,如:“ Accept-Charset: iso-8859-5, unicode-1-1;q=0.8”;
          Accept-Language:客戶端所能識別的語言,格式:“Accept-Language: 語言1[:權重],語言2[:權重]”,如:” Accept-Language: zh, en;q=0.7”;
          Host:客戶請求的主機域名或主機IP,格式:“Host: 域名或IP[:端口號]”,如:“Host: www.hexun.com:80“,請求行中若有HTTP/1.1則必須有該請求頭;
          User-Agent:表明用戶所使用的瀏覽器標識,主要用于統計的目的;
          Referer:指明該請求是從哪個關聯連接而來;

          Accept-Encoding:客戶端所能識別的編碼壓縮格式,如:“Accept-Encoding: gzip, deflate”;
          If- Modified-Since:該字段與客戶端緩存相關,客戶端所訪問的URL自該指定日期以來在服務端是否被修改過,如果修改過則服務端返回新的修改后的信息,如果未修改過則服務器返回304表明此請求所指URL未曾修改過,如:“If-Modified-Since: Fri, 2 Sep 2006 19:37:36 GMT”;
          If-None-Match:該字段與客戶端緩存相關,客戶端發送URL請求的同時發送該字段及標識,如果服務端的標識與客戶端的標識一致,則返回304表明此URL未修改過,如果不一致則服務端返回完整的數據信息,如:“If-None-Match: 0f0a893aad8c61:253, 0f0a893aad8c61:252, 0f0a893aad8c61:251”;
          Cookie:為擴展字段,存儲于客戶端,向同一域名的服務端發送屬于該域的cookie,如:“Cookie: MailUserName=whouse”;

           

          c) 實體頭(entity-header): (此類頭存在時要求有數據體)
          Content-Encoding:客戶端所能識別的編碼壓縮格式,如:“Content-Encoding: gzip, deflate”;
          Content-Length:客戶端以POST方法上傳數據時數據體部分的內容長度,如:“ Content-Length: 24”;
          Content- Type:客戶端發送的數據體的內容類型,如:“Content-Type: application/x-www-form-urlencoded”為以普通的POST方法發送的數據;“Content-Type: multipart/form-data; boundary=---------------------------5169208281820”,則表明數據體由多部分組成,分隔符為 “-----------------------------5169208281820”;

           

          2.5)響應格式

          a) 通用頭(general-header):
          Cache- Control:服務端要求中間代理及客戶端如何緩存自己響應的數據,如“Cache-Control: no-cache”,如:“Cache-Control: private” 不希望被緩存,“Cache-Control: public” 可以被緩存;
          Connection:服務端是否希望與客戶端之間保持長連接,如“Connection: close”, “Connection: keep-alive”;
          Date:只有當請求方法為POST或PUT方法時客戶端才可能會有些字段;
          Pragma:包含了服務端一些特殊響應信息,如 “Pragma: no-cache” 服務端希望代理或客戶端不應緩存結果數據;
          Transfer-Encoding:服務端向客戶端傳輸數據所采用的傳輸模式(僅在HTTP1.1中出現),如:“Transfer-Encoding: chunked”,注:該字段的優先級要高于“Content-Length” 字段的優先級;

           

          b)響應頭(response-header):
          Accept-Ranges:表明服務端接收的數據單位,如:“Accept-Ranges: bytes”, ;
          Location:服務端向客戶端返回此信息以使客戶端進行重定向,如:“Location: http://www.hexun.com”;
          Server:服務端返回的用于標識自己的一些信息,如:“ Server: Microsoft-IIS/6.0”;
          ETag:服務端返回的響應數據的標識字段,客戶端可根據此字段的值向服務器發送某URL是否更新的信息;

           

          c)實體頭(entity-header): (此類頭存在時要求有數據體)
          Content-Encoding:服務端所響應數據的編碼格式,如:“Content-Encoding: gzip”;
          Content-Length:服務端所返回數據的數據體部分的內容長度,如:“ Content-Length: 24”;
          Content-Type:服務端所返回的數據體的內容類型,如:“Content-Type: text/html; charset=gb2312” ;
          Set-Cookie:服務端返回給客戶端的cookie數據,如:“ Set-Cookie: ASP.NET_SessionId=icnh2ku2dqlmkciyobgvzl55; path=/”

           

          2.6)服務器返回狀態碼

          1xx:表明服務端接收了客戶端請求,客戶端繼續發送請求;
          2xx:客戶端發送的請求被服務端成功接收并成功進行了處理;
          3xx:服務端給客戶端返回用于重定向的信息;
          4xx:客戶端的請求有非法內容;
          5xx:服務端未能正常處理客戶端的請求而出現意外錯誤。

           

          舉例:

          “100”  ; 服務端希望客戶端繼續;
          “200”  ; 服務端成功接收并處理了客戶端的請求;
          “301”  ; 客戶端所請求的URL已經移走,需要客戶端重定向到其它的URL;
          “304”  ; 客戶端所請求的URL未發生變化;
          “400”  ; 客戶端請求錯誤;
          “403”  ; 客戶端請求被服務端所禁止;
          “404”  ; 客戶端所請求的URL在服務端不存在;
          “500”  ; 服務端在處理客戶端請求時出現異常;
          “501”  ; 服務端未實現客戶端請求的方法或內容;
          “502”  ; 此為中間代理返回給客戶端的出錯信息,表明服務端返回給代理時出錯;
          “503”  ; 服務端由于負載過高或其它錯誤而無法正常響應客戶端請求;
          “504”  ; 此為中間代理返回給客戶端的出錯信息,表明代理連接服務端出現超時。

           

          2.7)chunked 傳輸

            編碼使用若干個Chunk組成,由一個標明長度為0的chunk結束,每個Chunk有兩部分組成,第一部分是該Chunk的長度(以十六進制表示)和長度單位(一般不寫),第二部分就是指定長度的內容,每個部分用CRLF隔開。在最后一個長度為0的Chunk中的內容是稱為footer的內容,是一些沒有寫的頭部內容。另外,在HTTP頭里必須含有:” Transfer-Encoding: chunked” 通用頭字段。格式如下:

          chunked 傳輸

           

          2.8)HTTP 請求方法

          GET、POST、HEAD、CONNECT、PUT、DELETE、TRACE

           

          2.9)舉例

          a)GET請求

          Html代碼 復制代碼 收藏代碼

          1. GET http://photo.test.com/inc/global.js HTTP/1.1   
          2. Host: photo.test.com   
          3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0   
          4. Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5   
          5. Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3   
          6. Accept-Encoding: gzip,deflate   
          7. Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7   
          8. Keep-Alive: 300   
          9. Proxy-Connection: keep-alive   
          10. Cookie: ASP.NET_SessionId=ey5drq45lsomio55hoydzc45  
          11. Cache-Control: max-age=0  

          GET http://photo.test.com/inc/global.js HTTP/1.1

          User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0

          Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5

          Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3

          Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7

          Cookie: ASP.NET_SessionId=ey5drq45lsomio55hoydzc45

           

          b)POST請求

          Html代碼 復制代碼 收藏代碼

          1. POST / HTTP/1.1   
          2. Accept: image/gif, image/x-xbitmap, image/jpeg, application/vnd.ms-powerpoint, application/msword, */*   
          3. Accept-Language: zh-cn   
          4. Content-Type: application/x-www-form-urlencoded   
          5. Accept-Encoding: gzip, deflate   
          6. User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)   
          7. Host: www.test.com   
          8. Content-Length: 24   
          9. Connection: Keep-Alive   
          10. Cache-Control: no-cache   
          11.   
          12. name=value&submitsubmit=submit  

          Accept: image/gif, image/x-xbitmap, image/jpeg, application/vnd.ms-powerpoint, application/msword, */*

          Content-Type: application/x-www-form-urlencoded

          User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)

           

          c)通過HTTP代理發送GET請求

          Html代碼 復制代碼 收藏代碼

          1. GET http://mail.test.com/ HTTP/1.1   
          2. Host: mail.test.com   
          3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0   
          4. Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5   
          5. Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3   
          6. Accept-Encoding: gzip,deflate   
          7. Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7   
          8. Keep-Alive: 300   
          9. Proxy-Connection: keep-alive  

          GET http://mail.test.com/ HTTP/1.1

          User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0

          Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5

          Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3

          Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7

           

          d)POST方式上傳文件

          Html代碼 復制代碼 收藏代碼

          1. POST http://www.test.comt/upload_attach?uidl=%3C HTTP/1.1   
          2. Host: www.test.com   
          3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0   
          4. Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5   
          5. Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3   
          6. Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7   
          7. Content-Type: multipart/form-data; boundary=---------------------------5169208281820   
          8. Content-Length: 449   
          9.   
          10. -----------------------------5169208281820   
          11. Content-Disposition: form-data; name="file_1"filename=""  
          12. Content-Type: application/octet-stream   
          13.   
          14.   
          15. -----------------------------5169208281820   
          16. Content-Disposition: form-data; name="file_0"filename="test.txt"  
          17. Content-Type: text/plain   
          18.   
          19. hello world!   
          20.   
          21. -----------------------------5169208281820   
          22. Content-Disposition: form-data; name="oper"  
          23.   
          24. upload   
          25. -----------------------------5169208281820--  

          POST http://www.test.comt/upload_attach?uidl=%3C HTTP/1.1

          User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0

          Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5

          Accept-Language: en-us,zh-cn;q=0.7,zh;q=0.3

          Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7

          Content-Type: multipart/form-data; boundary=---------------------------5169208281820

          Content-Disposition: form-data; name="file_1"; filename=""

          Content-Type: application/octet-stream

          Content-Disposition: form-data; name="file_0"; filename="test.txt"

          Content-Disposition: form-data; name="oper"

           

          e)CONNECT舉例

          Html代碼 復制代碼 收藏代碼

          1. CONNECT mail.test.com:80 HTTP/1.1   
          2. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0   
          3. Proxy-Connection: keep-alive   
          4. Host: mail.test.com:80  

          CONNECT mail.test.com:80 HTTP/1.1

          User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; zh-CN; rv:1.8.1) Gecko/20061010 Firefox/2.0

           

          3.0)在終端以 telnet 方式測試

          a)打開回顯功能(針對windows)
            Windows 2000:進入DOS模式->輸入 telnet->set LOCAL_ECHO->退出:quit->telnet ip 80
            Windows xp:進入DOS模式->輸入telnet->set local echo->open ip 80
          b) 按HTTP協議格式輸入GET請求、HEAD請求、POST請求。

           

          posted on 2012-11-08 02:44 奮斗成就男人 閱讀(223) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 视频| 霍林郭勒市| 商丘市| 锡林浩特市| 仙居县| 南华县| 上高县| 大城县| 商城县| 仁寿县| 衢州市| 贺州市| 渭南市| 宽城| 舒兰市| 冕宁县| 乐昌市| 泰顺县| 迁安市| 彭州市| 固始县| 多伦县| 东乌珠穆沁旗| 双鸭山市| 渭南市| 永顺县| 新源县| 梁山县| 江安县| 定襄县| 湖口县| 板桥市| 惠安县| 荆门市| 昂仁县| 湟中县| 滦南县| 景东| 历史| 石河子市| 尚义县|