http協(xié)議在使用場景中的流程

通常由http客戶端發(fā)起請求,創(chuàng)建端口(即手機電腦等使用瀏覽器打開一個頁面)
這時,http服務器就在端口監(jiān)聽客戶端請求。
監(jiān)聽到之后,http服務器就向客戶端返回狀態(tài)(如200)和內(nèi)容(請求的文件,錯誤信息等)。

當輸入網(wǎng)址回車,或刷新頁面的時候,計算機和瀏覽器做了哪些事情呢?

首先是域名解析。
第一步,假設我們用的chrom瀏覽器。

1.chrom會搜索自身的dns緩存。
2.搜索操作系統(tǒng)自身的dns緩存

這個緩存時間大概是一分鐘,如果有緩存,那就看緩存有沒有過期,如果過期了,那這個過程就結(jié)束了。
如何看chrom有沒有緩存呢?
我們打開chrom瀏覽器,輸入chrome://net-internals/#dns

image.png

這里就可以查看你曾經(jīng)瀏覽過的網(wǎng)站的dns記錄。

如果瀏覽器沒有找到緩存或緩存已經(jīng)失效,那么chrom會搜索操作系統(tǒng)自身的一個dns緩存,如果找到,也沒有過期,那就會停止搜索,然后解析也到此結(jié)束。
3.如果操作系統(tǒng)也沒有找到dns緩存,chrom就會嘗試讀取本地的host文件,
image.png
4.如果在host里面也沒有找到對應的配置項,瀏覽器就會發(fā)起一個dns的系統(tǒng)調(diào)用,就會向本地主控的dns服務器,一般來說是你的寬帶運營商提供的, 發(fā)起一個域名解析請求。

運營商的域名解析服務器一般會:(以www.imooc.com為例)
1)查找自身的緩存,找到對應的條目,如果說也沒有過期,那么就解析成功了。
2)如果沒有找到這個條目,運營商的dns服務器會代替我們的瀏覽器發(fā)起一個迭代的dns解析的請求。
它首先會去找根域的dns IP地址,詢問imooc.com的域名地址,根域發(fā)現(xiàn)這是一個頂級域(com域)的域名,于是就回復運營商的服務器說,我只知道com域的頂級域的IP地址。
然后運營商拿到了com域的頂級域的IP地址,然后就去問它,com域回復說,他只知道imooc.com的dns服務器的地址。
隨后運營商的主控dns服務器就找到imooc.com這個域的dns服務器,這個一般是域名的注冊商提供的,詢問imooc.com的域名地址,imooc.com服務器查找到之后,將此發(fā)送給運營商的服務器。

運營商服務器把記過返回給操作系統(tǒng)內(nèi)核,同時也緩存在了自己的緩存區(qū)(這個緩存可能會失效,根據(jù)它的時間長短)
操作系統(tǒng)的內(nèi)核又把這個Ip地址返回給瀏覽器。

最終瀏覽器拿到了www.imooc.com對應的IP 地址。

5.瀏覽器獲得域名對應的IP地址后,就要發(fā)起TCP“三次握手”

瀏覽器就會以一個隨機端口,向web服務器(比如nginx 80端口)發(fā)起一個tcp的的鏈接請求。
這個TCP連接請求就會經(jīng)過層層的路由設備到達服務器端以后,進入到網(wǎng)卡,然后進入到內(nèi)核的TCP/IP協(xié)議棧,還有可能要經(jīng)過防火墻的過濾,最終到了web 服務端,最終建立了tcp/ip的連接。
這三次握手都做了什么呢?

客戶端對服務器說“你能聽到我說話么?咱倆聊會唄”
服務器對客戶端說“我能聽到你說話。咱倆聊會”
然后客戶端再對服務器說“好的,開始聊天吧!”

6.TCP/IP連接建立起來后,瀏覽器就可以向服務器發(fā)送HTTP請求了,比如說,用HTTP的get方法請求一個根域里的一個域名,協(xié)議可以采用HTTP 1.0的一個協(xié)議。
7.服務器端接受到了這個請求,根據(jù)路徑參數(shù),經(jīng)過后端的一些處理之后,把處理后的一個結(jié)果的數(shù)據(jù)返回給瀏覽器,如果是慕課網(wǎng)的頁面,就會把完整的HTML頁面代碼返回給瀏覽器。
8.瀏覽器拿到了完整的HTML頁面代碼。在解析和渲染這個頁面的時候,里面的JS,CSS ,圖片等靜態(tài)資源,他們同樣也是一個個HTTP請求,都需要經(jīng)過上面主要的七個步驟。
9.瀏覽器根據(jù)拿到的資源對頁面進行渲染,最終把頁面呈現(xiàn)給用戶。

HTTP劃分為請求和響應。
無論請求或響應,都具有http頭和正文信息。(這兩者是相同的)
http頭發(fā)送的是一些附加的信息:比如內(nèi)容類型,服務器發(fā)送響應的日期,HTTP狀態(tài)碼
正文就是用戶提交的表單數(shù)據(jù),或者說是一個返回的數(shù)據(jù)。

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

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

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