http協議

http:hyper text transfer protocol超文本傳輸協議。互聯網應用最普遍的網絡協議,主要用於web服務。格式爲HTML超文本標記語言來實現。php

協議的版本:html

    http0.9:僅於用戶傳輸html文檔
web

    http1.0:1,引用了mime機制:多用途互聯網郵件擴展,http能夠發送多媒體信息,此機制讓http不在單單隻支持html格式,還能夠支持其餘格式進行發送。
後端

         2,引用了keep-alive機制,支持持久鏈接的功能(在首部添加了某個字段而造成的,並不是原生就支持此功能)
瀏覽器

         3,引用支持緩存功能
緩存

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

    http2.0:提供了http語義優化的傳輸,可以加速http數據交互,尤爲是使用ssl加速機制。大師spdy如今用的還很少。
服務器

html文本架構:
網絡

wKioL1jnM1HzQDwkAAAWr-XMde8527.png-wh_50

html文檔生成方式:架構

    靜態:事先就編譯並定義完成的

wKiom1jnNA6CCMpXAADFW2-ZkYg997.png-wh_50

    1,web服務器向內核註冊socket

    2,客戶端經過瀏覽器向web服務器發起request請求

    3,web服務器收到客戶端的request信息

    4,若是用戶請求的資源在服務器本地,http服務器會向系統內核申請調用

    5,內核調用本地磁盤裏的數據,並將數據發送http服務

    6,http將用戶請求的資源經過response報文響應客戶端

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

wKioL1jnNBrTmgPFAADfagRRtK0607.png-wh_50

    用戶請求的是動態內容,http服務會調用後端的解析器,有動態語言去處理用戶的請求,須要請求數據的時候,會向內核申請調用,從而向磁盤中獲取用戶指定的數據,經過解釋器運行,運行的結果會生成html格式的文件,而後構建響應報文,最終發回給客戶端。

    http報文中存在不少行內容,通常是由ASCLL碼組成,各字段長度不肯定。http報文可分爲請求報文與響應報文。

    請求報文格式:

    wKiom1jnNkWgDtotAAAoC8GkI_k643.png-wh_50

    請求行:由請求方法字段<method>+請求URL字段<request-URL>+HTTP協議版本<version>組成。

        請求RUL:能夠是相對路徑,如/p_w_picpaths/log.jpg,也能夠是絕對路徑,如http://www.baidu.com/p_w_picpaths.banner.jpg

        <version>請求的協議版本,格式http/<major>.<minor>

    wKiom1jnN4qS_TJuAAMQSNM8hQM518.png-wh_50

        這是用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。

相應報文格式

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

    wKiom1jnOY-xPW3TAABu_Mu5S8o023.png-wh_50

        

                    狀態行:狀態行由 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

相關文章
相關標籤/搜索