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