天天看點

http協定

http:hyper text transfer protocol超文本傳輸協定。網際網路應用最廣泛的網絡協定,主要用于web服務。格式為HTML超文本标記語言來實作。

協定的版本:

    http0.9:僅于使用者傳輸html文檔

    http1.0:1,引用了mime機制:多用途網際網路郵件擴充,http可以發送多媒體資訊,此機制讓http不在單單隻支援html格式,還可以支援其他格式進行發送。

         2,引用了keep-alive機制,支援持久連接配接的功能(在首部添加了某個字段而形成的,并非原生就支援此功能)

         3,引用支援緩存功能

    http1.1:支援更多的請求方法,更加精細的緩存控制,原生直接支援持久連接配接功能。目前常用的版本

    http2.0:提供了http語義優化的傳輸,能夠加速http資料互動,尤其是使用ssl加速機制。大師spdy現在用的還不多。

html文本架構:

<a href="https://s2.51cto.com/wyfs02/M00/8F/A0/wKioL1jnM1HzQDwkAAAWr-XMde8527.png-wh_500x0-wm_3-wmp_4-s_3084636211.png" target="_blank"></a>

html文檔生成方式:

    靜态:事先就編譯并定義完成的

<a href="https://s2.51cto.com/wyfs02/M00/8F/A2/wKiom1jnNA6CCMpXAADFW2-ZkYg997.png-wh_500x0-wm_3-wmp_4-s_407477554.png" target="_blank"></a>

    1,web伺服器向核心注冊socket

    2,用戶端通過浏覽器向web伺服器發起request請求

    3,web伺服器收到用戶端的request資訊

    4,如果使用者請求的資源在伺服器本地,http伺服器會向系統核心申請調用

    5,核心調用本地磁盤裡的資料,并将資料發送http服務

    6,http将使用者請求的資源通過response封包響應用戶端

    動态:通過編譯語言編寫的程式輸出html格式的結果。動态語音有:php,jsp,asp,.net。這些語音都必須有相應的解釋器。

<a href="https://s4.51cto.com/wyfs02/M00/8F/A0/wKioL1jnNBrTmgPFAADfagRRtK0607.png-wh_500x0-wm_3-wmp_4-s_1689049244.png" target="_blank"></a>

    使用者請求的是動态内容,http服務會調用後端的解析器,有動态語言去處理使用者的請求,需要請求資料的時候,會向核心申請調用,進而向磁盤中擷取使用者指定的資料,通過解釋器運作,運作的結果會生成html格式的檔案,然後建構響應封包,最終發回給用戶端。

    http封包中存在很多行内容,一般是由ASCLL碼組成,各字段長度不确定。http封包可分為請求封包與響應封包。

    請求封包格式:

    請求行:由請求方法字段&lt;method&gt;+請求URL字段&lt;request-URL&gt;+HTTP協定版本&lt;version&gt;組成。

        &lt;version&gt;請求的協定版本,格式http/&lt;major&gt;.&lt;minor&gt;

        這是用wireshark工具抓取http請求封包的顯示結果。在首部後的“\r\n”表示一個回車和換行,以此将該首部與下一個首部隔開

        或者使用curl指令擷取http請求封包

    請求首部

        有關鍵字+關鍵字的值組成,之間使用“:”進行分隔,格式Name:Value,請求首部的作用是通過用戶端将請求的相關内容告知伺服器端,首部可以不止一個User-Agent:産生請求的浏覽器類型。Accept:用戶端可識别的内容類型清單。Host:請求的主機名,允許多個域名同處一個IP位址,即虛拟主機。

        ·        Client-IP:用戶端 IP位址

        ·        Host:請求的主機,這在實作基于主機名的虛拟主機時很有用

        ·        Referer:指明了請求目前資源原始資源的URL,使用referer是可以防盜鍊

        ·        User-Agent:使用者代理,一般而言是浏覽器

        ·        Accept首部:指用戶端可以接受哪些編碼的類型

                    § Accept:服務端能夠發送的媒體的類型

                    § Accetp-Charset:接收的字元集

                    § Accept-Encoding:編碼格式

                    § Accept-Lanage:所能接受的語言編碼格式

         ·        條件式請求首部:(在http1.1中才會用到)

當發送請求時,先問問對方是否滿足條件,如果滿足條件就請求,不滿足就不請求

       ·        跟安全相關的請求:

                § Authorization

                § Cookie

            空白行

        最後一個請求頭之後是一個空行,發送回車符和換行符,通知伺服器以下不再有請求頭。

    請求實體

        請求資料不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客戶填寫表單的場合。與請求資料相關的最常使用的請求頭是Content-Type和Content-Length。

相應封包格式

    起始行+響應首部+空白行+相應實體

                    狀态行:狀态行由 HTTP 協定版本字段、狀态碼和狀态碼的描述文本 3 個部分組成,他們之間使用空格隔開;

  ● 狀态碼由三位數字組成,第一位數字表示響應的類型,常用的狀态碼有五大類如下所示:

  1xx:表示伺服器已接收了用戶端請求,用戶端可繼續發送請求;

  2xx:表示伺服器已成功接收到請求并進行處理;

  3xx:表示伺服器要求用戶端重定向;

  4xx:表示用戶端的請求有非法内容;

  5xx:表示伺服器未能正常處理用戶端的請求而出現意外錯誤;

  ● 狀态碼描述文本有如下取值:

  200 OK:表示用戶端請求成功;

       201:CREATED上傳檔案成功後顯示

       301:Move Permanently,永久重定向,會傳回一個新位址,并告訴請求的位址将永久挪到哪個新位址

       302:Fonud:臨時重定向,臨時放到某個地方,會在響應封包中使用“Location:新位置”

       304:Not MOdified,資源沒有做

  400 Bad Request:表示用戶端請求有文法錯誤,不能被伺服器所了解;

  401 Unauthonzed:表示請求未經授權,該狀态代碼必須與 WWW-Authenticate 報頭域一起使用;

  403 Forbidden:表示伺服器收到請求,但是拒絕提供服務,通常會在響應正文中給出不提供服務的原因;

  404 Not Found:請求的資源不存在,例如,輸入了錯誤的URL;

  500 Internal Server Error:表示伺服器發生不可預期的錯誤,導緻無法完成用戶端的請求;

  503 Service Unavailable:表示伺服器目前不能夠處理用戶端的請求,在一段時間之後,伺服器可能會恢複正常;

  響應頭部:響應頭可能包括:

  Location:Location響應報頭域用于重定向接受者到一個新的位置。例如:用戶端所請求的頁面已不存在原先的位置,為了讓用戶端重定向到這個頁面新的位置,伺服器端可以發回Location響應報頭後使用重定向語句,讓用戶端去通路新的域名所對應的伺服器上的資源;

  Server:Server 響應報頭域包含了伺服器用來處理請求的軟體資訊及其版本。它和 User-Agent 請求報頭域是相對應的,前者發送伺服器端軟體的資訊,後者發送用戶端軟體(浏覽器)和作業系統的資訊。

  Vary:訓示不可緩存的請求頭清單;

  Connection:連接配接方式;

  對于請求來說:close(告訴 WEB 伺服器或者代理伺服器,在完成本次請求的響應後,斷開連接配接,不等待本次連接配接的後續請求了)。keepalive(告訴WEB伺服器或者代理伺服器,在完成本次請求的響應後,保持連接配接,等待本次連接配接的後續請求);

  對于響應來說:close(連接配接已經關閉); keepalive(連接配接保持着,在等待本次連接配接的後續請求); Keep-Alive:如果浏覽器請求保持連接配接,則該頭部表明希望WEB 伺服器保持連接配接多長時間(秒);例如:Keep-Alive:300;

  WWW-Authenticate:WWW-Authenticate響應報頭域必須被包含在401 (未授權的)響應消息中,這個報頭域和前面講到的Authorization 請求報頭域是相關的,當用戶端收到 401 響應消息,就要決定是否請求伺服器對其進行驗證。如果要求伺服器對其進行驗證,就可以發送一個包含了Authorization 報頭域的請求;

  空行:最後一個響應頭部之後是一個空行,發送回車符和換行符,通知伺服器以下不再有響應頭部。

  響應包體:伺服器傳回給用戶端的文本資訊;

http請求方法

                 http通信過程中,每個http請求封包中都會包含一個http請求方法,用于告知用戶端請求執行某些具體的操作

    GET: 請求指定的頁面資訊,并傳回實體主體。

                HEAD: 隻請求頁面的首部。

                POST: 請求伺服器接受所指定的文檔作為對所辨別的URI的新的從屬實體。

                PUT: 從用戶端向伺服器傳送的資料取代指定的文檔的内容。

                DELETE: 請求伺服器删除指定的頁面。

                OPTIONS: 允許用戶端檢視伺服器的性能。

                TRACE: 請求伺服器在響應中的實體主體部分傳回所得到的内容。

                PATCH: 實體中包含一個表,表中說明與該URI所表示的原内容的差別。

                MOVE: 請求伺服器将指定的頁面移至另一個網絡位址。

                COPY: 請求伺服器将指定的頁面拷貝至另一個網絡位址。

                LINK: 請求伺服器建立連結關系。

                UNLINK: 斷開連結關系。

                WRAPPED: 允許用戶端發送經過封裝的請求。

                Extension-mothed:在不改動協定的前提下,可增加另外的方法。

            比如:

                GET /index.html HTTP/1.1

                Accept: text/plain /*純ASCII碼文本檔案*/

                Accept: text/html /*HTML文本檔案*/

                User-Agent:Mozilla/4.5(WinNT)

                說明浏覽器使用Get方法請求文檔/index.html。浏覽器則隻允許接收純ASCII碼文本檔案和HTML文本檔案,其使用的引擎是Mozilla/4.5(Netscape)。

http常用的請求頭

                Accept:浏覽器可接受的MIMIE類型

                Accept-Charset:浏覽器可接受的字元集

                Accept-Encoding:浏覽器能夠進行解析的資料編碼方式

                Accept-Language:浏覽器所希望的語言種類

                Authorication:授權資訊

                Connection:表示是否需要持久連接配接。值為“keep-Alive”

                Content-Length:表示請求消息正文的長度

                Cookie:相關的http擴充頭

                        Cookie:用戶端将伺服器設定的Cookie傳回到伺服器

                        Set-Cookie:伺服器向用戶端設定Cookie

                        Cookie2:用戶端訓示伺服器支援Cookie的版本

                        set-Cookie2:伺服器向用戶端設定Cookie

本文轉自   宏強   51CTO部落格,原文連結:http://blog.51cto.com/tanhong/1913843

繼續閱讀