HTTP協(xié)議(HyperText Transfer Protocol,超文本傳輸協(xié)議)是用于從WWW服務器傳輸超文本到本地瀏覽器的傳送協(xié)議。它可以使瀏覽器更加高效,使網(wǎng)絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內(nèi)容首先顯示(如文本先于圖形)等。
在了解HTTP如何工作之前,我們先了解計算機之間的通信。
互聯(lián)網(wǎng)的關鍵技術就是TCP/IP協(xié)議。兩臺計算機之間的通信是通過TCP/IP協(xié)議在因特網(wǎng)上進行的。實際上這個是兩個協(xié)議:
TCP : Transmission Control Protocol 傳輸控制協(xié)議和IP: Internet Protocol 網(wǎng)際協(xié)議。
IP:計算機之間的通信
IP協(xié)議是計算機用來相互識別的通信的一種機制,每臺計算機都有一個IP.用來在internet上標識這臺計算機。 IP 負責在因特網(wǎng)上發(fā)送和接收數(shù)據(jù)包。通過 IP,消息(或者其他數(shù)據(jù))被分割為小的獨立的包,并通過因特網(wǎng)在計算機之間傳送。IP 負責將每個包路由至它的目的地。
IP協(xié)議僅僅是允許計算機相互發(fā)消息,但它并不檢查消息是否以發(fā)送的次序到達而且沒有損壞(只檢查關鍵的頭數(shù)據(jù))。為了提供消息檢驗功能,直接在IP協(xié)議上設計了傳輸控制協(xié)議TCP.
TCP : 應用程序之間的通信
TCP確保數(shù)據(jù)包以正確的次序到達,并且嘗試確認數(shù)據(jù)包的內(nèi)容沒有改變。TCP在IP地址之上引端口(port),它允許計算機通過網(wǎng)絡提供各種服務。一些端口號為不同的服務保留,而且這些端口號是眾所周知。
服務或者守護進程:在提供服務的機器上,有程序監(jiān)聽特定端口上的通信流。例如大多數(shù)電子郵件通信流出現(xiàn)在端口25上,用于wwww的HTTP通信流出現(xiàn)在80端口上。
當應用程序希望通過 TCP 與另一個應用程序通信時,它會發(fā)送一個通信請求。這個請求必須被送到一個確切的地址。在雙方“握手”之后,TCP 將在兩個應用程序之間建立一個全雙工 (full-duplex) 的通信,占用兩個計算機之間整個的通信線路。TCP 用于從應用程序到網(wǎng)絡的數(shù)據(jù)傳輸控制。TCP 負責在數(shù)據(jù)傳送之前將它們分割為 IP 包,然后在它們到達的時候?qū)⑺鼈冎亟M。
TCP/IP 就是TCP 和 IP 兩個協(xié)議在一起協(xié)同工作,有上下層次的關系。
TCP 負責應用軟件(比如你的瀏覽器)和網(wǎng)絡軟件之間的通信。IP 負責計算機之間的通信。TCP 負責將數(shù)據(jù)分割并裝入 IP 包,IP 負責將包發(fā)送至接受者,傳輸過程要經(jīng)IP路由器負責根據(jù)通信量、網(wǎng)絡中的錯誤或者其他參數(shù)來進行正確地尋址,然后在它們到達的時候重新組合它們。
HTTP是基于TCP協(xié)議之上的。在TCP/IP協(xié)議參考模型的各層對應的協(xié)議如下圖,其中HTTP是應用層的協(xié)議。
HTTP由請求和響應構成,是一個標準的客戶端服務器模型(B/S)。HTTP協(xié)議永遠都是客戶端發(fā)起請求,服務器回送響應。見下圖:
HTTP是一個無狀態(tài)的協(xié)議。無狀態(tài)是指客戶機(Web瀏覽器)和服務器之間不需要建立持久的連接,這意味著當一個客戶端向服務器端發(fā)出請求,然后服務器返回響應(response),連接就被關閉了,在服務器端不保留連接的有關信息.HTTP遵循請求(Request)/應答(Response)模型??蛻魴C(瀏覽器)向服務器發(fā)送請求,服務器處理請求并返回適當?shù)膽?。所有HTTP連接都被構造成一套請求和應答。
一次HTTP操作稱為一個事務,其工作整個過程如下:
1 ) 、地址解析,
如用客戶端瀏覽器請求這個頁面:http://localhost.com:8080/index.htm
從中分解出協(xié)議名、主機名、端口、對象路徑等部分,對于我們的這個地址,解析得到的結果如下:
協(xié)議名:http
主機名:localhost.com
端口:8080
對象路徑:/index.htm
在這一步,需要域名系統(tǒng)DNS解析域名localhost.com,得主機的IP地址。
2)、封裝HTTP請求數(shù)據(jù)包
把以上部分結合本機自己的信息,封裝成一個HTTP請求數(shù)據(jù)包
3)封裝成TCP包,建立TCP連接(TCP的三次握手)
在HTTP工作開始之前,客戶機(Web瀏覽器)首先要通過網(wǎng)絡與服務器建立連接,該連接是通過TCP來完成的,該協(xié)議與IP協(xié)議共同構建Internet,即著名的TCP/IP協(xié)議族,因此Internet又被稱作是TCP/IP網(wǎng)絡。HTTP是比TCP更高層次的應用層協(xié)議,根據(jù)規(guī)則,只有低層協(xié)議建立之后才能,才能進行更層協(xié)議的連接,因此,首先要建立TCP連接,一般TCP連接的端口號是80。這里是8080端口
4)客戶機發(fā)送請求命令
建立連接后,客戶機發(fā)送一個請求給服務器,請求方式的格式為:統(tǒng)一資源標識符(URL)、協(xié)議版本號,后邊是MIME信息包括請求修飾符、客戶機信息和可內(nèi)容。
5)服務器響應
服務器接到請求后,給予相應的響應信息,其格式為一個狀態(tài)行,包括信息的協(xié)議版本號、一個成功或錯誤的代碼,后邊是MIME信息包括服務器信息、實體信息和可能的內(nèi)容。
實體消息是服務器向瀏覽器發(fā)送頭信息后,它會發(fā)送一個空白行來表示頭信息的發(fā)送到此為結束,接著,它就以Content-Type應答頭信息所描述的格式發(fā)送用戶所請求的實際數(shù)據(jù)
6)服務器關閉TCP連接
一般情況下,一旦Web服務器向瀏覽器發(fā)送了請求數(shù)據(jù),它就要關閉TCP連接,然后如果瀏覽器或者服務器在其頭信息加入了這行代碼
Connection:keep-alive
TCP連接在發(fā)送后將仍然保持打開狀態(tài),于是,瀏覽器可以繼續(xù)通過相同的連接發(fā)送請求。保持連接節(jié)省了為每個請求建立新連接所需的時間,還節(jié)約了網(wǎng)絡帶寬。
首先我們看看客戶端請求的時候,數(shù)據(jù)在各層協(xié)議的數(shù)據(jù)組織如下圖:
而服務器解析客戶機請求就是反向操作的過程,如下圖:
客戶機發(fā)起一次請求的時候:
客戶機會將請求封裝成http數(shù)據(jù)包-->封裝成Tcp數(shù)據(jù)包-->封裝成Ip數(shù)據(jù)包--->封裝成數(shù)據(jù)幀--->硬件將幀數(shù)據(jù)轉換成bit流(二進制數(shù)據(jù))-->最后通過物理硬件(網(wǎng)卡芯片)發(fā)送到指定地點。
服務器硬件首先收到bit流....... 然后轉換成ip數(shù)據(jù)包。于是通過ip協(xié)議解析Ip數(shù)據(jù)包,然后又發(fā)現(xiàn)里面是tcp數(shù)據(jù)包,就通過tcp協(xié)議解析Tcp數(shù)據(jù)包,接著發(fā)現(xiàn)是http數(shù)據(jù)包通過http協(xié)議再解析http數(shù)據(jù)包得到數(shù)據(jù)。
HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL。其所用的端口號是443。
有兩種基本的加解密算法類型:
1)對稱加密(symmetrcic encryption):密鑰只有一個,加密解密為同一個密碼,且加解密速度快,典型的對稱加密算法有DES、AES,RC5,3DES等;
對稱加密主要問題是共享秘鑰,除你的計算機(客戶端)知道另外一臺計算機(服務器)的私鑰秘鑰,否則無法對通信流進行加密解密。解決這個問題的方案非對稱秘鑰。
2)非對稱加密:使用兩個秘鑰:公共秘鑰和私有秘鑰。私有秘鑰由一方密碼保存(一般是服務器保存),另一方任何人都可以獲得公共秘鑰。
這種密鑰成對出現(xiàn)(且根據(jù)公鑰無法推知私鑰,根據(jù)私鑰也無法推知公鑰),加密解密使用不同密鑰(公鑰加密需要私鑰解密,私鑰加密需要公鑰解密),相對對稱加密速度較慢,典型的非對稱加密算法有RSA、DSA等。
下面看一下https的通信過程:
https通信的優(yōu)點:
1)客戶端產(chǎn)生的密鑰只有客戶端和服務器端能得到;
2)加密的數(shù)據(jù)只有客戶端和服務器端才能得到明文;
3)客戶端到服務端的通信是安全的。
聯(lián)系客服