(二)HTTP初相识--了解HTTP协议
HTTP初相識--了解HTTP協(xié)議
- 瀏覽器背后的故事
- HTTP協(xié)議的前世今生
- 透過TCPIP看HTTP
- DNS域名解析
- 回溯HTTP事務(wù)處理過程
- 與HTTP請求的第一次親密接觸
瀏覽器背后的故事
通過DNS服務(wù)器查詢域名所映射的IP地址,瀏覽器通過查詢到的ip地址和WEB服務(wù)器進(jìn)行通訊,通訊的協(xié)議就是HTTP協(xié)議
WEB服務(wù)器收到請求,自然會到后端來執(zhí)行,然后將執(zhí)行結(jié)果以響應(yīng)報文的形式回傳給瀏覽器,瀏覽器將響應(yīng)報文進(jìn)行渲染,渲染以后就是我們看到的頁面了
渲染引擎是根據(jù)我們的html文件描述對應(yīng)相對應(yīng)的數(shù)學(xué)模型,調(diào)用我們?yōu)g覽器的各個零部件,把我們網(wǎng)頁資源的源代碼展示成圖像結(jié)果
HTTP
超文本傳輸協(xié)議(HTTP)是一種通信協(xié)議,它允許將超文本標(biāo)記語言(HTML)文檔從Web服務(wù)器傳送到客戶端的瀏覽器(簡單地來說,是用來在網(wǎng)頁傳遞html的一種規(guī)則)
HTTP是一個屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統(tǒng)。它于1990年提出,經(jīng)過幾年的使用與發(fā)展,得到不斷地完善和擴(kuò)展
Web與HTTP
WEB是一種基于超文本和HTTP的、全球性的、動態(tài)交互的、跨平臺的分布式圖形信息系統(tǒng)
建立在Internet上的一種網(wǎng)絡(luò)服務(wù),為瀏覽者在Internet上查找和瀏覽信息提供了圖形化的、易于訪問的直觀界面,其中的文檔及超級鏈接將Internet上的信息節(jié)點組織成一個互為關(guān)聯(lián)的網(wǎng)狀結(jié)構(gòu)(簡單地說Web是基于HTTP而來的,是在HTTP協(xié)議基礎(chǔ)之上的圖形優(yōu)化展示
)
HTTP協(xié)議的前世今生
1990年Tim完成了萬維網(wǎng)三大基礎(chǔ)設(shè)計,包括命名方案URI,通信協(xié)議HTTP,還有用來表示信息的標(biāo)記語言HTML
1991年HTTP0.9只有g(shù)et,只能傳遞HTML格式的字符串,每個HTTP請求都是短連接
1996年HTTP1.0擁有更多技能,像post和head,擁有了更多的功能性,比如狀態(tài)碼、緩存、重定向、權(quán)限等等
1997年HTTP1.1擁有更多的技能,比如options、put、delete、connect等等,也引入了現(xiàn)在常用的持久連接,管道機(jī)制,分塊傳輸?shù)鹊?/p>
2015年HTTP2.0提高了我們的傳輸性能,實現(xiàn)了低延遲和高吞吐量
透過TCPIP看HTTP
HTTP協(xié)議是構(gòu)建在TCP/IP協(xié)議之上的,是TCP/IP協(xié)議的一個子集,是TCP/IP家族中的一員
為了更好的理解HTTP協(xié)議,我們先了解下TCP/IP的相關(guān)知識
TCP/IP協(xié)議族
TCP/IP協(xié)議其實是一系列與互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集合起來的總稱
分層管理是TCP/IP協(xié)議的重要特征
TCP/IP協(xié)議族分層
TCP/IP協(xié)議族是由一個四層協(xié)議組成的系統(tǒng),這四層分別為:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層
應(yīng)用層
應(yīng)用層一般是我們編寫的應(yīng)用程序,決定了向用戶提供的應(yīng)用服務(wù)。應(yīng)用層可以通過系統(tǒng)調(diào)用與傳輸層向下進(jìn)行通信。如:FTP、DNS、HTTP等
傳輸層
傳輸層通過系統(tǒng)調(diào)用向應(yīng)用層提供處于網(wǎng)絡(luò)連接中的兩臺計算機(jī)之間的數(shù)據(jù)傳輸功能
在傳輸層有兩個性質(zhì)不同的協(xié)議:TCP(面向連接,有連接可靠、效率比較低)和UDP(無連接,無連接沒有校驗機(jī)制比較不可靠、效率比較高)
網(wǎng)絡(luò)層(網(wǎng)絡(luò)互聯(lián)層)
網(wǎng)絡(luò)層用來處理在網(wǎng)絡(luò)上流動的數(shù)據(jù)包,數(shù)據(jù)包是網(wǎng)絡(luò)傳輸?shù)淖钚?shù)據(jù)單位,該層規(guī)定了通過怎樣的路徑(傳輸路線)到達(dá)對方計算機(jī),并把數(shù)據(jù)包傳輸給對方(在眾多選項中選擇一條傳輸路徑)
鏈路層(數(shù)據(jù)鏈路層或者網(wǎng)絡(luò)接口層)
鏈路層是用來處理連接網(wǎng)絡(luò)的硬件部分,包括控制操作系統(tǒng)、硬件設(shè)備驅(qū)動、NIC(Network Interface Card,網(wǎng)絡(luò)適配器)以及光纖等物理可見部分。一切的傳輸媒介,硬件上的范疇均在鏈路層的作用范圍之內(nèi)
數(shù)據(jù)包的封裝過程
上層協(xié)議的數(shù)據(jù)如何轉(zhuǎn)變?yōu)橄聦訁f(xié)議的數(shù)據(jù),這就是通過封裝來實現(xiàn)
應(yīng)用程序數(shù)據(jù)在發(fā)布到我們數(shù)據(jù)網(wǎng)絡(luò)之前,會沿著這個協(xié)議棧,從上往下去進(jìn)行傳遞,每層協(xié)議都在我們上層協(xié)議的基礎(chǔ)之上加上自己的頭部信息,鏈路層還會加上尾部信息,以此來實現(xiàn)所有層的封裝,最終為到達(dá)我們的網(wǎng)絡(luò)提供所有的必要信息,這就是數(shù)據(jù)包的封裝過程
HTTP數(shù)據(jù)傳輸過程
我們內(nèi)容TCPIP協(xié)議族進(jìn)行網(wǎng)絡(luò)傳輸通信的時候,會通過分層的順序與對方進(jìn)行通信,發(fā)送端從應(yīng)用層往下走,接收端從應(yīng)用層向上走
我們就拿HTTP協(xié)議進(jìn)行舉例說明
首先作為發(fā)送端的客戶端,在應(yīng)用層也就是通過我們的HTTP協(xié)議發(fā)出一個想看某個WEB頁面的HTTP請求
接下來,為了傳輸方便,在傳輸層,就是通過TCP協(xié)議把應(yīng)用層收到的數(shù)據(jù),就是HTTP的請求報文進(jìn)行分割并且在各個報文上打上標(biāo)記序號、端口號等等一系列信息發(fā)送到我們的網(wǎng)絡(luò)層
在網(wǎng)絡(luò)層就是通過我們的IP協(xié)議增加作為通訊目的地的MAC地址,然后轉(zhuǎn)發(fā)給鏈路層
這樣一來呢,發(fā)往網(wǎng)絡(luò)的通信請求就準(zhǔn)備齊全了,接收端的服務(wù)器在鏈路層接收到請求的數(shù)據(jù),按順序向上層發(fā)送,一直發(fā)送到應(yīng)用層
當(dāng)我們傳輸?shù)綉?yīng)用層時才算我們真正收到由客戶端發(fā)送過來的HTTP請求,發(fā)送端在層與層之間傳輸數(shù)據(jù)時,每經(jīng)過一層必定會打上該層所屬的頭部信息,反過來說,在接收端,在層與層傳輸數(shù)據(jù)時,每經(jīng)過一層都要把對應(yīng)的頭部信息消去
發(fā)送端發(fā)送數(shù)據(jù)時,數(shù)據(jù)會從上層傳輸?shù)较聦?#xff0c;且每經(jīng)過一層都會被打上該層的頭部信息。而接收端接收數(shù)據(jù)時,數(shù)據(jù)會從下層傳輸?shù)缴蠈?#xff0c;傳輸前會把下層的頭部信息刪除
傳輸層—TCP三次握手
第一次握手:
客戶端發(fā)送帶有SYN標(biāo)志的連接請求報文段,然后進(jìn)入SYN_SEND狀態(tài),等待服務(wù)端的確認(rèn)
第二次握手:
服務(wù)端接收到客戶端的SYN報文段后,需要發(fā)送ACK信息對這個SYN報文段進(jìn)行確認(rèn)。同時,還要發(fā)送自己的SYN請求信息。服務(wù)端會將上述的信息放到一個報文段(SYN+ACK報文段)中,一并發(fā)送給客戶端,此時服務(wù)端將會進(jìn)入SYN_RECV狀態(tài)
第三次握手:
客戶端接收到服務(wù)端的SYN+ACK報文段后,會向服務(wù)端發(fā)送ACK確認(rèn)報文段,這個報文段發(fā)送完畢后,客戶端和服務(wù)端都進(jìn)入ESTABLISHED狀態(tài),完成TCP三次握手
三次握手的目的
兩端確認(rèn)可以開始傳輸為什么要經(jīng)歷三次握手,三次握手的目的是我們的客戶端和通信端要進(jìn)行連接,要確認(rèn)雙方都能夠明確自己和對方的收發(fā)能力是正常的
所以第一次握手,客戶端發(fā)送了網(wǎng)絡(luò)包,服務(wù)端收到了,服務(wù)端得出客戶端的發(fā)送能力是正常的,我自己的接收能力也沒問題,但客戶端這時候什么都不知道,因為客戶端只發(fā)送了請求,所以服務(wù)端要給它確認(rèn),所以給客戶端發(fā)了個包,這里面帶著自己的確認(rèn)和請求,這樣客戶端得到服務(wù)端接收能力和發(fā)送能力是正常的,我自己的發(fā)送能力和接收能力也是正常的,第三次握手是因為服務(wù)端只知道客戶端的發(fā)送能力和自己的接收能力,所以客戶端要再發(fā)一次,這時候服務(wù)端就能得出客戶端的接收和發(fā)送能力,自己的接收和發(fā)送能力都是沒問題的
總是接收的一方能得到一些結(jié)論,發(fā)送方是不知道的,所以想要建立一個連接,至少需要三次連接過程
就像A和B都剛買了新手機(jī),都想測試自己的短信功能是不是正常
DNS域名解析
DNS服務(wù)和HTTP協(xié)議有著密不可分的關(guān)系
通常我們訪問一個網(wǎng)站,使用的是主機(jī)名或者域名來進(jìn)行訪問的。因為相對于IP地址(一組純數(shù)字),域名更容易讓人記住,但TCP/IP協(xié)議使用的是IP地址進(jìn)行訪問的,所以必須有個機(jī)制或者服務(wù)把域名轉(zhuǎn)換成IP地址,DNS服務(wù)就是用來解決這個問題的,它提供域名到IP地址之間的解析服務(wù)
為了提高效率,DNS服務(wù)解析是有層次的,是一個就近原則,首先我們本地電腦會將經(jīng)常使用的域名和想要的IP地址建立一個映射關(guān)系,并且保存到系統(tǒng)文件里,所以正常情況下,在我們DNS解析的時候,會優(yōu)先從HOST文件里尋找IP地址,如果本地HOST文件沒有域名對應(yīng)的IP地址,會求助于本地的DNS服務(wù)器,本地都有自己的一個DNS服務(wù),向本地的DNS服務(wù)發(fā)送請求,請求域名對應(yīng)的IP地址,如果本地DNS服務(wù)沒有,會一層一層向上一級DNS服務(wù)請求,直到根DNS服務(wù),如果找到就會進(jìn)行回傳,最終返回給瀏覽器
CDN與DNS是怎么一層關(guān)系呢,DNS上掛載CDN,先由CDN來進(jìn)行內(nèi)容的分發(fā),它告訴我根據(jù)自己的區(qū)域決定訪問哪邊的服務(wù)器,然后再通過DNS服務(wù)器返回給我們
回溯HTTP事務(wù)處理過程
當(dāng)客戶端訪問Web站點時,首先會通過DNS服務(wù)查詢到域名的IP地址,然后瀏覽器生成HTTP請求,并通過TCP/IP協(xié)議發(fā)送給Web服務(wù)器。Web服務(wù)器接收到請求后會根據(jù)請求生成響應(yīng)內(nèi)容,并通過TCP/IP協(xié)議返回給客戶端
如果我們用客戶端瀏覽器瀏覽一個頁面的話,我們就要從中分解出我們的協(xié)議名,端口,對象路徑等等,我們得到協(xié)議用的是HTTP協(xié)議,主機(jī)可能是慕課的主機(jī),端口是80端口,對象路徑是慕課的根結(jié)點,我們要通過DNS服務(wù)器解析出它的IP地址,下一步封裝我們HTTP請求的數(shù)據(jù)包,把以上部分結(jié)合本地信息封裝成一個HTTP請求的數(shù)據(jù)包,接下來再把這個數(shù)據(jù)包向下,我們HTTP是最上層的應(yīng)用層,再往下是傳輸層,我們把這個包裝成TCP包,這樣才能建立TCP連接,就是TCP的三次握手,在HTTP開始工作之前,客戶機(jī)首先要通過網(wǎng)絡(luò)與服務(wù)器進(jìn)行連接,這個連接就是TCP來完成的,這個協(xié)議與IP協(xié)議共同構(gòu)建了我們整個的互聯(lián)網(wǎng),也就是前面說過的TCPIP協(xié)議族,HTTP是比TCP更高層次的,所以只有低層協(xié)議建立好以后才能建立更高層次的連接,所以TCP連接建立好以后就進(jìn)行HTTP請求,最后關(guān)鍵一點,一般來說Web服務(wù)器向瀏覽器發(fā)送請求數(shù)據(jù),我們就要關(guān)閉TCP連接,把連接釋放掉
與HTTP請求的第一次親密接觸
可以下載WIRESHARK進(jìn)行觀察
DNS解析 > TCP連接(三次握手) > HTTP > 釋放TCP連接
總結(jié)
以上是生活随笔為你收集整理的(二)HTTP初相识--了解HTTP协议的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 祝福结婚十年的祝福语214个
- 下一篇: (三)HTTP再邂逅--熟悉HTTP协议