1. 程式人生 > >HTTP基本原理(簡介)

HTTP基本原理(簡介)

原文:http://blog.csdn.NET/hguisu/article/details/8680808

1. HTTP簡介

         HTTP協議(HyperText Transfer Protocol,超文字傳輸協議)是用於從WWW伺服器傳輸超文字到本地瀏覽器的傳送協議。它可以使瀏覽器更加高效,使網路傳輸減少。它不僅保證計算機正確快速地傳輸超文字文件,還確定傳輸文件中的哪一部分,以及哪部分內容首先顯示(如文字先於圖形)等。

  在瞭解HTTP如何工作之前,我們先了解計算機之間的通訊。

2. 計算機相互之間的通訊

        網際網路的關鍵技術就是TCP/IP協議。兩臺計算機之間的通訊是通過TCP/IP協議在因特網上進行的。實際上這個是兩個協議:

        TCP : Transmission Control Protocol 傳輸控制協議和IP: Internet Protocol  網際協議。

        IP:計算機之間的通訊

        IP協議是計算機用來相互識別的通訊的一種機制,每臺計算機都有一個IP.用來在internet上標識這臺計算機。  IP 負責在因特網上傳送和接收資料包。通過 IP,訊息(或者其他資料)被分割為小的獨立的包,並通過因特網在計算機之間傳送。IP 負責將每個包路由至它的目的地。

        IP協議僅僅是允許計算機相互發訊息,但它並不檢查訊息是否以傳送的次序到達而且沒有損壞(只檢查關鍵的頭資料)。為了提供訊息檢驗功能,直接在IP協議上設計了傳輸控制協議TCP.

       TCP : 應用程式之間的通訊

       TCP確保資料包以正確的次序到達,並且嘗試確認資料包的內容沒有改變。TCP在IP地址之上引埠(port),它允許計算機通過網路提供各種服務。一些埠號為不同的服務保留,而且這些埠號是眾所周知。

       服務或者守護程序:在提供服務的機器上,有程式監聽特定埠上的通訊流。例如大多數電子郵件通訊流出現在埠25上,用於wwww的HTTP通訊流出現在80埠上。

       當應用程式希望通過 TCP 與另一個應用程式通訊時,它會發送一個通訊請求。這個請求必須被送到一個確切的地址。在雙方“握手”之後,TCP 將在兩個應用程式之間建立一個全雙工 (full-duplex) 的通訊,佔用兩個計算機之間整個的通訊線路。TCP 用於從應用程式到網路的資料傳輸控制。TCP 負責在資料傳送之前將它們分割為 IP 包,然後在它們到達的時候將它們重組。

       TCP/IP 就是TCP 和 IP 兩個協議在一起協同工作,有上下層次的關係。

       TCP 負責應用軟體(比如你的瀏覽器)和網路軟體之間的通訊。IP 負責計算機之間的通訊。TCP 負責將資料分割並裝入 IP 包,IP 負責將包傳送至接受者,傳輸過程要經IP路由器負責根據通訊量、網路中的錯誤或者其他引數來進行正確地定址,然後在它們到達的時候重新組合它們。

3. HTTP協議所在的協議層

      HTTP是基於TCP協議之上的。在TCP/IP協議參考模型的各層對應的協議如下圖,其中HTTP是應用層的協議。

      

4. HTTP請求響應模型   

       HTTP由請求和響應構成,是一個標準的客戶端伺服器模型(B/S)。HTTP協議永遠都是客戶端發起請求,伺服器回送響應。見下圖:

    

       HTTP是一個無狀態的協議。無狀態是指客戶機(Web瀏覽器)和伺服器之間不需要建立持久的連線,這意味著當一個客戶端向伺服器端發出請求,然後伺服器返回響應(response),連線就被關閉了,在伺服器端不保留連線的有關資訊.HTTP遵循請求(Request)/應答(Response)模型。客戶機(瀏覽器)向伺服器傳送請求,伺服器處理請求並返回適當的應答。所有HTTP連線都被構造成一套請求和應答。

5. HTTP工作過程      

     一次HTTP操作稱為一個事務,其工作整個過程如下:

     1 ) 、地址解析,

     從中分解出協議名、主機名、埠、物件路徑等部分,對於我們的這個地址,解析得到的結果如下:
     協議名:http
     主機名:localhost.com
     埠:8080
     物件路徑:/index.htm

      在這一步,需要域名系統DNS解析域名localhost.com,得主機的IP地址。


    2)、封裝HTTP請求資料包

     把以上部分結合本機自己的資訊,封裝成一個HTTP請求資料包


     3)封裝成TCP包,建立TCP連線TCP的三次握手

       在HTTP工作開始之前,客戶機(Web瀏覽器)首先要通過網路與伺服器建立連線,該連線是通過TCP來完成的,該協議與IP協議共同構建Internet,即著名的TCP/IP協議族,因此Internet又被稱作是TCP/IP網路。HTTP是比TCP更高層次的應用層協議,根據規則,只有低層協議建立之後才能,才能進行更層協議的連線,因此,首先要建立TCP連線,一般TCP連線的埠號是80。這裡是8080埠

     4)客戶機發送請求命令

       建立連線後,客戶機發送一個請求給伺服器,請求方式的格式為:統一資源識別符號(URL)、協議版本號,後邊是MIME資訊包括請求修飾符、客戶機資訊和可內容。

     5)伺服器響應

     伺服器接到請求後,給予相應的響應資訊,其格式為一個狀態行,包括資訊的協議版本號、一個成功或錯誤的程式碼,後邊是MIME資訊包括伺服器資訊、實體資訊和可能的內容。

        實體訊息是伺服器向瀏覽器傳送頭資訊後,它會發送一個空白行來表示頭資訊的傳送到此為結束,接著,它就以Content-Type應答頭資訊所描述的格式傳送使用者所請求的實際資料

     6)伺服器關閉TCP連線

一般情況下,一旦Web伺服器向瀏覽器傳送了請求資料,它就要關閉TCP連線,然後如果瀏覽器或者伺服器在其頭資訊加入了這行程式碼

    Connection:keep-alive

   TCP連線在傳送後將仍然保持開啟狀態,於是,瀏覽器可以繼續通過相同的連線傳送請求。保持連線節省了為每個請求建立新連線所需的時間,還節約了網路頻寬。

6. HTTP協議棧中各層資料流      

             首先我們看看客戶端請求的時候,資料在各層協議的資料組織如下圖:

         

            而伺服器解析客戶機請求就是反向操作的過程,如下圖:

           
       

       客戶機發起一次請求的時候:

       客戶機會將請求封裝成http資料包-->封裝成Tcp資料包-->封裝成Ip資料包--->封裝成資料幀--->硬體將幀資料轉換成bit流(二進位制資料)-->最後通過物理硬體(網絡卡晶片)傳送到指定地點。

       伺服器硬體首先收到bit流....... 然後轉換成ip資料包。於是通過ip協議解析Ip資料包,然後又發現裡面是tcp資料包,就通過tcp協議解析Tcp資料包,接著發現是http資料包通過http協議再解析http資料包得到資料。