HTTP詳解(1)-工作原理

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是應用層的協議。

      1.gif

4. HTTP請求響應模型   

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

    2.jpg

 

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

 

5. HTTP工作過程      

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

     1 ) 、地址解析,

     如用客戶端瀏覽器請求這個頁面:http://localhost.com:8080/index.htm

     從中分解出協議名、主機名、端口、對象路徑等部分,對于我們的這個地址,解析得到的結果如下:
     協議名: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協議棧中各層數據流      

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

         3.gif

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

           4.gif       

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

       客戶機會將請求封裝成http數據包–>封裝成Tcp數據包–>封裝成Ip數據包—>封裝成數據幀—>硬件將幀數據轉換成bit流(二進制數據)–>最后通過物理硬件(網卡芯片)發送到指定地點。

       服務器硬件首先收到bit流……. 然后轉換成ip數據包。于是通過ip協議解析Ip數據包,然后又發現里面是tcp數據包,就通過tcp協議解析Tcp數據包,接著發現是http數據包通過http協議再解析http數據包得到數據。

6. HTTPS實現原理    

             HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL。其所用的端口號是443。

         SSL:安全套接層,是netscape公司設計的主要用于web的安全傳輸協議。這種協議在WEB上獲得了廣泛的應用。通過證書認證來確保客戶端和網站服務器之間的通信數據是加密安全的。

      有兩種基本的加解密算法類型:

      1)對稱加密(symmetrcic encryption):密鑰只有一個,加密解密為同一個密碼,且加解密速度快,典型的對稱加密算法有DES、AES,RC5,3DES等;

       對稱加密主要問題是共享秘鑰,除你的計算機(客戶端)知道另外一臺計算機(服務器)的私鑰秘鑰,否則無法對通信流進行加密解密。解決這個問題的方案非對稱秘鑰。

      2)非對稱加密:使用兩個秘鑰:公共秘鑰和私有秘鑰。私有秘鑰由一方密碼保存(一般是服務器保存),另一方任何人都可以獲得公共秘鑰。

      這種密鑰成對出現(且根據公鑰無法推知私鑰,根據私鑰也無法推知公鑰),加密解密使用不同密鑰(公鑰加密需要私鑰解密,私鑰加密需要公鑰解密),相對對稱加密速度較慢,典型的非對稱加密算法有RSA、DSA等。

   下面看一下https的通信過程:

   5.jpg

        過程大致如下:

        1) SSL客戶端通過TCP和服務器建立連接之后(443端口),并且在一般的tcp連接協商(握手)過程中請求證書。

              即客戶端發出一個消息給服務器,這個消息里面包含了自己可實現的算法列表和其它一些需要的消息,SSL的服務器端會回應一個數據包,這里面確定了這次通信所需要的算法,然后服務器向客戶端返回證書。(證書里面包含了服務器信息:域名。申請證書的公司,公共秘鑰)。                 

       2)Client在收到服務器返回的證書后,判斷簽發這個證書的公共簽發機構,并使用這個機構的公共秘鑰確認簽名是否有效,客戶端還會確保證書中列出的域名就是它正在連接的域名。

       3)  如果確認證書有效,那么生成對稱秘鑰并使用服務器的公共秘鑰進行加密。然后發送給服務器,服務器使用它的私鑰對它進行解密,這樣兩臺計算機可以開始進行對稱加密進行通信。

https通信的優點:

1)客戶端產生的密鑰只有客戶端和服務器端能得到;

2)加密的數據只有客戶端和服務器端才能得到明文;

3)客戶端到服務端的通信是安全的。

轉自:http://blog.csdn.net/hguisu/article/details/8680808

原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/2651

(0)
s19930811s19930811
上一篇 2015-04-04
下一篇 2015-04-04

相關推薦

  • Linux文件系統:從inode理解軟鏈接與硬鏈接

    什么是inode? 在Linux磁盤存儲文件系統中,我們以塊劃分磁盤為兩部分:超級塊(superblock)和數據塊(data block);同時劃分單文件為用戶數據(user data)和元數據(meta data)兩個部分。 用戶數據記錄的是文件的真實內容。比如你的血液、骨骼和各器官等等。 元數據這是附加于文件的屬性信息。比如身高、體重、血型和年齡等等。…

    Linux干貨 2016-08-07
  • LAMP

    備注:本次安裝是采用的系統自帶的yum源進行安裝的 第一步:安裝Apache 1:安裝apache,命令如下: yum install?-y httpd   2:修改httpd.conf,修改ServerName的域名,具體步驟如下: 使用vi編輯器打開apache配置文件,命令如下: vi /etc/httpd/conf/httpd.conf 按…

    Linux干貨 2017-10-09
  • (一)Linux發行版及基礎命令簡述

    計算機 Linux 發行版 命令 幫助

    2017-12-11
  • 8.5作業

    找出ifconfig命令結果中本機的所有ipv4地址 [root@English6 wang]# ifconfig |grep -o "[1-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" 192.168.1.113 192.168…

    Linux干貨 2016-08-09
  • 馬哥教育網絡班22期+第9周課程練習

    week9: 1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin); 分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash # SHELL1="/sbin/nologin" declare -i sum1=sum2=0 for&nb…

    Linux干貨 2016-10-17
  • 8.8作業

    4、如何設置tab縮進為4個字符?    set tabstop=4     5、復制/etc/rc.d/init.d/functions文件至/tmp目錄;替換/tmp/functions文件中的/etc/sysconfig/init為/var/log; cp /etc/rc.d/init.d/functi…

    Linux干貨 2016-08-11
欧美性久久久久