Http工作原理

1. HTTP

? ? ? HTTP協(xié)議:簡單對象訪問協(xié)議,對應(yīng)于應(yīng)用層 ,HTTP協(xié)議是基于TCP/IP連接的。正因?yàn)槿绱?,在了解Http工作原理之前,我們先得了解TCP/IP 協(xié)議層模型


2. TCP/IP協(xié)議模型


?? ??2.1 TCP/IP協(xié)議

? ? ? ?2.1.1 ?IP:計(jì)算機(jī)之間的通信

? ? ? ? IP協(xié)議是計(jì)算機(jī)用來相互識(shí)別的通信的一種機(jī)制,每臺(tái)計(jì)算機(jī)都有一個(gè)IP. 用來在internet上.標(biāo)識(shí)這臺(tái)計(jì)算機(jī)。IP 負(fù)責(zé)在因特網(wǎng)上發(fā)送和接收數(shù)據(jù)包。通過 IP,消息(或者其他數(shù)據(jù))被分割為小的獨(dú)立的包,并通過因特網(wǎng)在計(jì)算機(jī)之間傳送。IP 負(fù)責(zé)將每個(gè)包路由至它的目的地。

? ? ? ? IP協(xié)議僅僅是允許計(jì)算機(jī)相互發(fā)消息,但它并不檢查消息是否以發(fā)送的次序到達(dá)而且沒有損壞(只檢查關(guān)鍵的頭數(shù)據(jù))。為了提供消息檢驗(yàn)功能,直接在IP協(xié)議上設(shè)計(jì)了傳輸控制協(xié)議TCP.

? ? ? ?2.1.2 ?TCP : 應(yīng)用程序之間的通信

? ? ? ??TCP確保數(shù)據(jù)包以正確的次序到達(dá),并且嘗試確認(rèn)數(shù)據(jù)包的內(nèi)容沒有改變。TCP在IP地址之上引 ?端口(port),它允許計(jì)算機(jī)通過網(wǎng)絡(luò)提供各種服務(wù)。一些端口號(hào)為不同的服務(wù)保留,而且這些端口號(hào)是眾所周知。

? ? ? ?服務(wù)或者守護(hù)進(jìn)程:在提供服務(wù)的機(jī)器上,有程序監(jiān)聽特定端口上的通信流。例如大多數(shù)電子郵件通信流出現(xiàn)在端口25上,用于wwww的HTTP通信流出現(xiàn)在80端口上。

? ? ? 當(dāng)應(yīng)用程序希望通過 TCP 與另一個(gè)應(yīng)用程序通信時(shí),它會(huì)發(fā)送一個(gè)通信請求。這個(gè)請求必須被送到一個(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。

? ? ? 2.1.3 TCP/IP 之間的關(guān)系

? ? ? ?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ā)送至接受者,傳輸過程要經(jīng)IP路由器負(fù)責(zé)根據(jù)通信量、網(wǎng)絡(luò)中的錯(cuò)誤或者其他參數(shù)來進(jìn)行正確地尋址,然后在它們到達(dá)的時(shí)候重新組合它們。

 ? 2.1.4 TCP 三次握手過程

? ? ? ?第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等? ? ? ? ? ?待服務(wù)器確認(rèn);

? ? ? ?第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也? ? ? ? ? ?發(fā)送一個(gè)SYN包 (syn=k),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài);

? ? ? ?第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包? ? ? ? ? ? ? ? ? ? ? ?ACK(ack=k+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完? ? ? ? ?成三次握手。

? ? ? ?握手過程中傳送的包里不包含數(shù)據(jù),三次握手完畢后,客戶端與服務(wù)器才正式開始傳送數(shù)據(jù)。理想狀態(tài)下,TCP連接一旦建立,在通信雙方中的任何一方主動(dòng)關(guān)閉連接之前,TCP 連接都將被一直保持下去。斷開連接時(shí)

????2.2? TCP/IP 與 Socket之間的關(guān)系

? ? ?套接字(socket)是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡(luò)通信的基本操作單? ?元。它是網(wǎng)絡(luò)通信過程中端點(diǎn)的抽象表示,包含進(jìn)行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議,本地主機(jī)的IP地址,本地進(jìn)程的協(xié)議端口,遠(yuǎn)地主機(jī)的IP地址,遠(yuǎn)地進(jìn)程的協(xié)議端口。

? ? ?我們平時(shí)說的最多的socket是什么呢,實(shí)際上socket是對TCP/IP協(xié)議的封裝,Socket本身并不是協(xié)議,而是一個(gè)調(diào)用接口(API),通過Socket,我們才能使 用TCP/IP協(xié)議


3.HTTP協(xié)議

? ? ? 3.1 HTTP請求響應(yīng)模型

? ? ? ? HTTP由請求和響應(yīng)構(gòu)成,是一個(gè)標(biāo)準(zhǔn)的客戶端服務(wù)器模型(B/S)。HTTP協(xié)議永遠(yuǎn)都是客戶端發(fā)起請求,服務(wù)器回送響應(yīng)

? ? ? ? HTTP是一個(gè)無狀態(tài)的協(xié)議。無狀態(tài)是指客戶機(jī)(Web瀏覽器)和服務(wù)器之間不需要建立持久的連接,這意味著當(dāng)一個(gè)客戶端向服務(wù)器端發(fā)出請求,然后服務(wù)器返回響應(yīng)(response),連接就被關(guān)閉了,在服務(wù)器端不保留連接的有關(guān)信息.HTTP遵循請求(Request)/應(yīng)答(Response)模型。客戶機(jī)(瀏覽器)向服務(wù)器發(fā)送請求,服務(wù)器處理請求并返回適當(dāng)?shù)膽?yīng)答。所有HTTP連接都被構(gòu)造成一套請求和應(yīng)答

? ? ? ? 3.2 HTTP工作過程

? ? ? ? ? ?一次HTTP操作稱為一個(gè)事務(wù),其工作整個(gè)過程如下:

? ? ? ? ? ?1 ) 、地址解析,

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

????????????????從中分解出協(xié)議名、主機(jī)名、端口、對象路徑等部分,對于我們的這個(gè)地? ? ? ? ? ? ? ????址,解析得到的結(jié)果如下:

????????????????協(xié)議名:http

????????????????主機(jī)名:localhost.com

????????????????端口:8080

????????????????對象路徑:/index.htm

? ? ? ? ????????在這一步,需要域名系統(tǒng)DNS解析域名localhost.com,得主機(jī)的IP地址。

? ? ? ? ? 2)、封裝HTTP請求數(shù)據(jù)包

? ? ? ? ? ? ? ? 把以上部分結(jié)合本機(jī)自己的信息,封裝成一個(gè)HTTP請求數(shù)據(jù)包

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

? ? ? ? ? 4)客戶機(jī)發(fā)送請求命令

? ? ? ? ? ? ? ? ? 建立連接后,客戶機(jī)發(fā)送一個(gè)請求給服務(wù)器,請求方式的格式為:統(tǒng)一資 ????????????源標(biāo)識(shí)符(URL)、協(xié)議版本號(hào),后邊是MIME信息包括請求修飾符、客戶機(jī) ????????????信息和可內(nèi)容。

? ? ? ? ? 5)服務(wù)器響應(yīng)

? ? ? ? ? ? ? ?服務(wù)器接到請求后,給予相應(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è)空白行來表示頭信息的發(fā)送到此為結(jié)束,接著它就以Content-Type應(yīng)答頭信息所描述的格式 發(fā)送用戶所請求的實(shí)際數(shù)據(jù)

???? ????6)服務(wù)器關(guān)閉TCP連接

????????一般情況下,一旦Web服務(wù)器向?yàn)g覽器發(fā)送了請求數(shù)據(jù),它就要關(guān)閉TCP 連接,然后如果瀏覽器或者服務(wù)器在其頭信息加入了這行代碼

????????Connection:keep-alive

????????TCP連接在發(fā)送后將仍然保持打開狀態(tài),于是,瀏覽器可以繼續(xù)通過相同的連接發(fā)送請求。保持連接節(jié)省了為每個(gè)請求建立新連接所需的時(shí)間,還節(jié)約了網(wǎng)絡(luò)帶寬。

????????客戶機(jī)發(fā)起一次請求的時(shí)候:

????????客戶機(jī)會(huì)將請求封裝成http數(shù)據(jù)包-->封裝成Tcp數(shù)據(jù)包-->封裝成Ip數(shù)據(jù)包--- >封裝成數(shù)據(jù)幀--->硬件將幀數(shù)據(jù)轉(zhuǎn)換成bit流(二進(jìn)制數(shù)據(jù))-->最后通過物理硬件(網(wǎng)卡芯片)發(fā)送到指定地點(diǎn)。

????????服務(wù)器硬件首先收到bit流....... 然后轉(zhuǎn)換成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ù)。


4.HTTPS實(shí)現(xiàn)原理

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

????????SSL:安全套接層,是netscape公司設(shè)計(jì)的主要用于web的安全傳輸協(xié)議。這種協(xié)議在WEB上獲得了廣泛的應(yīng)用。通過證書認(rèn)證來確??蛻舳撕途W(wǎng)站服務(wù)器之間的通信數(shù)據(jù)是加密安全的。

????4.1加密類型? ??

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

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

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

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

? ? 4.2HTTPS通訊過程


? ? 大致過程如下:

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

? ? ? ? ? ?即客戶端發(fā)出一個(gè)消息給服務(wù)器,這個(gè)消息里面包含了自己可實(shí)現(xiàn)的算法列表和其它一些需要的消息,SSL的服務(wù)器端會(huì)回應(yīng)一個(gè)數(shù)據(jù)包,這里面確定了這次通信所需要的算法,然后服務(wù)器向客戶端返回證書。(證書里面包含服務(wù)器信息:域名。申請證書的公司,公共秘鑰)

????2)Client在收到服務(wù)器返回的證書后,判斷簽發(fā)這個(gè)證書的公共簽發(fā)機(jī)構(gòu),并使用這個(gè)機(jī)構(gòu)的公共秘鑰確認(rèn)簽名是否有效,客戶端還會(huì)確保證書中列出的域名就是它正在連接的域名。

? ? 3)如果確認(rèn)證書有效,那么生成對稱秘鑰并使用服務(wù)器的公共秘鑰進(jìn)行加密。然后發(fā)送給服務(wù)器,服務(wù)器使用它的私鑰對它進(jìn)行解密,這樣兩臺(tái)計(jì)算機(jī)可以開 始進(jìn)行對稱加密進(jìn)行通信。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容