<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    HTTP數據包頭解析---之溫故而知新!

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    [轉]HTTP請求模型和頭信息參考

    參考: http://blog.csdn.net/baggio785/archive/2006/04/13/661410.aspx
    模型: http://blog.csdn.net/baggio785/archive/2006/04/13/661412.aspx

     

    HTTP請求模型

    一、連接至Web服務器
    一個客戶端應用(如Web瀏覽器)打開到Web服務器的HTTP端口的一個套接字(缺省為80)。

    例如:http://www.myweb.com:8080/index.html
    在Java中,這將等同于代碼:
    Soceet socket=new Socket("www.myweb.com",8080);
    InputStream in=socket.getInputStream();
    OutputStream out=socket.getOutputStream();

    二、發送HTTP請求
    通過連接,客戶端寫一個ASCII文本請求行,后跟0或多個HTTP頭標,一個空行和實現請求的任意數據。
    一個請求由四個部分組成:請求行、請求頭標、空行和請求數據
    1.請求行:請求行由三個標記組成:請求方法、請求URI和HTTP版本,它們用空格分隔。
    例如:GET /index.html HTTP/1.1
    HTTP規范定義了8種可能的請求方法:
    GET            檢索URI中標識資源的一個簡單請求
    HEAD            與GET方法相同,服務器只返回狀態行和頭標,并不返回請求文檔
    POST            服務器接受被寫入客戶端輸出流中的數據的請求
    PUT            服務器保存請求數據作為指定URI新內容的請求
    DELETE            服務器刪除URI中命名的資源的請求
    OPTIONS        關于服務器支持的請求方法信息的請求
    TRACE            Web服務器反饋Http請求和其頭標的請求
    CONNECT        已文檔化但當前未實現的一個方法,預留做隧道處理
    2.請求頭標:由關鍵字/值對組成,每行一對,關鍵字和值用冒號(:)分隔。
    請求頭標通知服務器有關于客戶端的功能和標識,典型的請求頭標有:
    User-Agent        客戶端廠家和版本
    Accept            客戶端可識別的內容類型列表
    Content-Length    附加到請求的數據字節數
    3.空行:最后一個請求頭標之后是一個空行,發送回車符和退行,通知服務器以下不再有頭標。
    4.請求數據:使用POST傳送數據,最常使用的是Content-Type和Content-Length頭標。

    三、服務端接受請求并返回HTTP響應
    Web服務器解析請求,定位指定資源。服務器將資源副本寫至套接字,在此處由客戶端讀取。
    一個響應由四個部分組成;狀態行、響應頭標、空行、響應數據
    1.狀態行:狀態行由三個標記組成:HTTP版本、響應代碼和響應描述。
    HTTP版本:向客戶端指明其可理解的最高版本。
    響應代碼:3位的數字代碼,指出請求的成功或失敗,如果失敗則指出原因。
    響應描述:為響應代碼的可讀性解釋。
    例如:HTTP/1.1 200 OK
    HTTP響應碼:
    1xx:信息,請求收到,繼續處理
    2xx:成功,行為被成功地接受、理解和采納
    3xx:重定向,為了完成請求,必須進一步執行的動作
    4xx:客戶端錯誤:
    2.響應頭標:像請求頭標一樣,它們指出服務器的功能,標識出響應數據的細節。
    3.空行:最后一個響應頭標之后是一個空行,發送回車符和退行,表明服務器以下不再有頭標。
    4.響應數據:HTML文檔和圖像等,也就是HTML本身。

    四、服務器關閉連接,瀏覽器解析響應
    1.瀏覽器首先解析狀態行,查看表明請求是否成功的狀態代碼。
    2.然后解析每一個響應頭標,頭標告知以下為若干字節的HTML。
    3.讀取響應數據HTML,根據HTML的語法和語義對其進行格式化,并在瀏覽器窗口中顯示它。
    4.一個HTML文檔可能包含其它需要被載入的資源引用,瀏覽器識別這些引用,對其它的資源再進行額外的請求,此過程循環多次。

    五、無狀態連接
    HTTP模型是無狀態的,表明在處理一個請求時,Web服務器并不記住來自同一客戶端的請求。

    六、實例
    1.瀏覽器發出請求
    GET /index.html HTTP/1.1
    服務器返回響應
    HTTP /1.1 200 OK
    Date: Apr 11 2006 15:32:08 GMT
    Server: Apache/2.0.46(win32)
    Content-Length: 119
    Content-Type: text/html

    <HTML>
    <HEAD>
    <LINK REL="stylesheet" HREF="index.css">
    </HEAD>
    <BODY>
    <IMG SRC="image/logo.png">
    </BODY>
    </HTML>

    2.瀏覽器發出請求
    GET /index.css HTTP/1.1
    服務器返回響應
    HTTP /1.1 200 OK
    Date: Apr 11 2006 15:32:08 GMT
    Server: Apache/2.0.46(win32)
    Connection: Keep-alive, close
    Content-Length: 70
    Content-Type: text/plane

    h3{
        font-size:20px;
        font-weight:bold;
        color:#005A9C;
    }

    3.瀏覽器發出請求
    GET image/logo.png HTTP/1.1
    服務器返回響應
    HTTP /1.1 200 OK
    Date: Apr 11 2006 15:32:08 GMT
    Server: Apache/2.0.46(win32)
    Connection: Keep-alive, close
    Content-Length: 1280
    Content-Type: text/plane

    {Binary image data follows}


    (附錄)
    1.HTTP規范:Internet工程制定組織(IETF)發布的RFC指定Internet標準,這些RFC被Internet研究發展機構廣泛接受。因為它們是標準文檔,故一般用正規語言編寫,如立法文標一樣。
    2.RFC:RFC一旦被提出,就被編號且不會再改變,當一個標準被修改時,則給出一個新的RFC。作為標準,RFC在Internet上被廣泛采用。
    3.HTTP的幾個重要RFC:
        RFC1945    HTTP 1.0 描述
        RFC2068    HTTP 1.1 初步描述
        RFC2616    HTTP 1.1 標準
    4.資源標識符URI(Uniform Resource Identifter,URI)

     

    HTTP參考

    一、HTTP碼應碼
    響應碼由三位十進制數字組成,它們出現在由HTTP服務器發送的響應的第一行。

    響應碼分五種類型,由它們的第一位數字表示:
    1.1xx:信息,請求收到,繼續處理
    2.2xx:成功,行為被成功地接受、理解和采納
    3.3xx:重定向,為了完成請求,必須進一步執行的動作
    4.4xx:客戶端錯誤,請求包含語法錯誤或者請求無法實現
    5.5xx:服務器錯誤,服務器不能實現一種明顯無效的請求

    下表顯示每個響應碼及其含義:
    100            繼續
    101            分組交換協
    200            OK
    201            被創建
    202            被采納
    203            非授權信息
    204            無內容
    205            重置內容
    206            部分內容
    300            多選項
    301            永久地傳送
    302            找到
    303            參見其他
    304            未改動
    305            使用代理
    307            暫時重定向
    400            錯誤請求
    401            未授權
    402            要求付費
    403            禁止
    404            未找到
    405            不允許的方法
    406            不被采納
    407            要求代理授權
    408            請求超時
    409            沖突
    410            過期的
    411            要求的長度
    412            前提不成立
    413            請求實例太大
    414            請求URI太大
    415            不支持的媒體類型
    416            無法滿足的請求范圍
    417            失敗的預期
    500            內部服務器錯誤
    501            未被使用
    502            網關錯誤
    503            不可用的服務
    504            網關超時
    505            HTTP版本未被支持

    二、HTTP頭標
    頭標由主鍵/值對組成。它們描述客戶端或者服務器的屬性、被傳輸的資源以及應該實現連接。

    四種不同類型的頭標:
    1.通用頭標:即可用于請求,也可用于響應,是作為一個整體而不是特定資源與事務相關聯。
    2.請求頭標:允許客戶端傳遞關于自身的信息和希望的響應形式。
    3.響應頭標:服務器和于傳遞自身信息的響應。
    4.實體頭標:定義被傳送資源的信息。即可用于請求,也可用于響應。

    頭標格式:<name>:<value><CRLF>

    下表描述在HTTP/1.1中用到的頭標
    Accept            定義客戶端可以處理的媒體類型,按優先級排序;
                            在一個以逗號為分隔的列表中,可以定義多種類型和使用通配符。例如:Accept: image/jpeg,image/png,*/*
    Accept-Charset        定義客戶端可以處理的字符集,按優先級排序;
                     在一個以逗號為分隔的列表中,可以定義多種類型和使用通配符。例如:Accept-Charset: iso-8859-1,*,utf-8
    Accept-Encoding        定義客戶端可以理解的編碼機制。例如:Accept-Encoding:gzip,compress
    Accept-Language    定義客戶端樂于接受的自然語言列表。例如:Accept-Language: en,de
    Accept-Ranges        一個響應頭標,它允許服務器指明:將在給定的偏移和長度處,為資源組成部分的接受請求。
                該頭標的值被理解為請求范圍的度量單位。例如Accept-Ranges: bytes或Accept-Ranges: none
    Age            允許服務器規定自服務器生成該響應以來所經過的時間長度,以秒為單位。
                該頭標主要用于緩存響應。例如:Age: 30
    Allow            一個響應頭標,它定義一個由位于請求URI中的次源所支持的HTTP方法列表。例如:Allow: GET,PUT
    aUTHORIZATION        一個響應頭標,用于定義訪問一種資源所必需的授權(域和被編碼的用戶ID與口令)。
                例如:Authorization: Basic YXV0aG9yOnBoaWw=
    Cache-Control        一個用于定義緩存指令的通用頭標。例如:Cache-Control: max-age=30
    Connection        一個用于表明是否保存socket連接為開放的通用頭標。例如:Connection: close或Connection: keep-alive
    Content-Base        一種定義基本URI的實體頭標,為了在實體范圍內解析相對URLs。
                如果沒有定義Content-Base頭標解析相對URLs,使用Content-Location URI(存在且絕對)或使用URI請求。
                例如:Content-Base: Http://www.myweb.com
    Content-Encoding    一種介質類型修飾符,標明一個實體是如何編碼的。例如:Content-Encoding: zip
    Content-Language    用于指定在輸入流中數據的自然語言類型。例如:Content-Language: en
    Content-Length        指定包含于請求或響應中數據的字節長度。例如:Content-Length:382
    Content-Location        指定包含于請求或響應中的資源定位(URI)。
                如果是一絕。對URL它也作為被解析實體的相對URL的出發點。
                例如:Content-Location: http://www.myweb.com/news
    Content-MD5        實體的一種MD5摘要,用作校驗和。
                發送方和接受方都計算MD5摘要,接受方將其計算的值與此頭標中傳遞的值進行比較。
                例如:Content-MD5: <base64 of 128 MD5 digest>
    Content-Range        隨部分實體一同發送;標明被插入字節的低位與高位字節偏移,也標明此實體的總長度。
                例如:Content-Range: 1001-2000/5000
    Contern-Type        標明發送或者接收的實體的MIME類型。例如:Content-Type: text/html
    Date            發送HTTP消息的日期。例如:Date: Mon,10PR 18:42:51 GMT
    ETag            一種實體頭標,它向被發送的資源分派一個唯一的標識符。
                對于可以使用多種URL請求的資源,ETag可以用于確定實際被發送的資源是否為同一資源。
                例如:ETag: "208f-419e-30f8dc99"
    Expires            指定實體的有效期。例如:Expires: Mon,05 Dec 2008 12:00:00 GMT
    Form            一種請求頭標,給定控制用戶代理的人工用戶的電子郵件地址。例如:From: webmaster@myweb.com
    Host            被請求資源的主機名。對于使用HTTP/1.1的請求而言,此域是強制性的。例如:Host: www.myweb.com
    If-Modified-Since        如果包含了GET請求,導致該請求條件性地依賴于資源上次修改日期。
                如果出現了此頭標,并且自指定日期以來,此資源已被修改,應該反回一個304響應代碼。
                例如:If-Modified-Since: Mon,10PR 18:42:51 GMT
    If-Match            如果包含于一個請求,指定一個或者多個實體標記。只發送其ETag與列表中標記區配的資源。
                例如:If-Match: "208f-419e-308dc99"
    If-None-Match        如果包含一個請求,指定一個或者多個實體標記。資源的ETag不與列表中的任何一個條件匹配,操作才執行。
                例如:If-None-Match: "208f-419e-308dc99"
    If-Range            指定資源的一個實體標記,客戶端已經擁有此資源的一個拷貝。必須與Range頭標一同使用。
                如果此實體自上次被客戶端檢索以來,還不曾修改過,那么服務器只發送指定的范圍,否則它將發送整個資源。
                例如:Range: byte=0-499<CRLF>If-Range:"208f-419e-30f8dc99"
    If-Unmodified-Since    只有自指定的日期以來,被請求的實體還不曾被修改過,才會返回此實體。
                例如:If-Unmodified-Since:Mon,10PR 18:42:51 GMT
    Last-Modified        指定被請求資源上次被修改的日期和時間。例如:Last-Modified: Mon,10PR 18:42:51 GMT
    Location            對于一個已經移動的資源,用于重定向請求者至另一個位置。
                與狀態編碼302(暫時移動)或者301(永久性移動)配合使用。
                例如:Location: http://www2.myweb.com/index.jsp
    Max-Forwards        一個用于TRACE方法的請求頭標,以指定代理或網關的最大數目,該請求通過網關才得以路由。
                在通過請求傳遞之前,代理或網關應該減少此數目。例如:Max-Forwards: 3
    Pragma            一個通用頭標,它發送實現相關的信息。例如:Pragma: no-cache
    Proxy-Authenticate    類似于WWW-Authenticate,便是有意請求只來自請求鏈(代理)的下一個服務器的認證。
                例如:Proxy-Authenticate: Basic realm-admin
    Proxy-Proxy-Authorization    類似于授權,但并非有意傳遞任何比在即時服務器鏈中更進一步的內容。
                例如:Proxy-Proxy-Authorization: Basic YXV0aG9yOnBoaWw=
    Public            列表顯示服務器所支持的方法集。例如:Public: OPTIONS,MGET,MHEAD,GET,HEAD
    Range            指定一種度量單位和一個部分被請求資源的偏移范圍。例如:Range: bytes=206-5513
    Refener            一種請求頭標域,標明產生請求的初始資源。對于HTML表單,它包含此表單的Web頁面的地址。
                例如:Refener: http://www.myweb.com/news/search.html
    Retry-After        一種響應頭標域,由服務器與狀態編碼503(無法提供服務)配合發送,以標明再次請求之前應該等待多長時間。
                此時間即可以是一種日期,也可以是一種秒單位。例如:Retry-After: 18
    Server            一種標明Web服務器軟件及其版本號的頭標。例如:Server: Apache/2.0.46(Win32)
    Transfer-Encoding    一種通用頭標,標明對應被接受方反向的消息體實施變換的類型。例如:Transfer-Encoding: chunked
    Upgrade        允許服務器指定一種新的協議或者新的協議版本,與響應編碼101(切換協議)配合使用。
                例如:Upgrade: HTTP/2.0
    User-Agent        定義用于產生請求的軟件類型(典型的如Web瀏覽器)。
                例如:User-Agent: Mozilla/4.0(compatible; MSIE 5.5; Windows NT; DigExt)
    Vary            一個響應頭標,用于表示使用服務器驅動的協商從可用的響應表示中選擇響應實體。例如:Vary: *
    Via            一個包含所有中間主機和協議的通用頭標,用于滿足請求。例如:Via: 1.0 fred.com, 1.1 wilma.com
    Warning            用于提供關于響應狀態補充信息的響應頭標。例如:Warning: 99 www.myweb.com Piano needs tuning
    www-Authenticate    一個提示用戶代理提供用戶名和口令的響應頭標,與狀態編碼401(未授權)配合使用。響應一個授權頭標。
                例如:www-Authenticate: Basic realm=zxm.mgmt

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全