通常由http客戶端發(fā)起請求,創(chuàng)建端口(即手機(jī)電腦等使用瀏覽器打開一個頁面)
這時,http服務(wù)器就在端口監(jiān)聽客戶端請求。
監(jiān)聽到之后,http服務(wù)器就向客戶端返回狀態(tài)(如200)和內(nèi)容(請求的文件,錯誤信息等)。
當(dāng)輸入網(wǎng)址回車,或刷新頁面的時候,計(jì)算機(jī)和瀏覽器做了哪些事情呢?
首先是域名解析。
第一步,假設(shè)我們用的chrom瀏覽器。
1.chrom會搜索自身的dns緩存。
2.搜索操作系統(tǒng)自身的dns緩存
這個緩存時間大概是一分鐘,如果有緩存,那就看緩存有沒有過期,如果過期了,那這個過程就結(jié)束了。
如何看chrom有沒有緩存呢?
我們打開chrom瀏覽器,輸入chrome://net-internals/#dns
這里就可以查看你曾經(jīng)瀏覽過的網(wǎng)站的dns記錄。
如果瀏覽器沒有找到緩存或緩存已經(jīng)失效,那么chrom會搜索操作系統(tǒng)自身的一個dns緩存,如果找到,也沒有過期,那就會停止搜索,然后解析也到此結(jié)束。
3.如果操作系統(tǒng)也沒有找到dns緩存,chrom就會嘗試讀取本地的host文件,
4.如果在host里面也沒有找到對應(yīng)的配置項(xiàng),瀏覽器就會發(fā)起一個dns的系統(tǒng)調(diào)用,就會向本地主控的dns服務(wù)器,一般來說是你的寬帶運(yùn)營商提供的, 發(fā)起一個域名解析請求。
運(yùn)營商的域名解析服務(wù)器一般會:(以www.imooc.com為例)
1)查找自身的緩存,找到對應(yīng)的條目,如果說也沒有過期,那么就解析成功了。
2)如果沒有找到這個條目,運(yùn)營商的dns服務(wù)器會代替我們的瀏覽器發(fā)起一個迭代的dns解析的請求。
它首先會去找根域的dns IP地址,詢問imooc.com的域名地址,根域發(fā)現(xiàn)這是一個頂級域(com域)的域名,于是就回復(fù)運(yùn)營商的服務(wù)器說,我只知道com域的頂級域的IP地址。
然后運(yùn)營商拿到了com域的頂級域的IP地址,然后就去問它,com域回復(fù)說,他只知道imooc.com的dns服務(wù)器的地址。
隨后運(yùn)營商的主控dns服務(wù)器就找到imooc.com這個域的dns服務(wù)器,這個一般是域名的注冊商提供的,詢問imooc.com的域名地址,imooc.com服務(wù)器查找到之后,將此發(fā)送給運(yùn)營商的服務(wù)器。
運(yùn)營商服務(wù)器把記過返回給操作系統(tǒng)內(nèi)核,同時也緩存在了自己的緩存區(qū)(這個緩存可能會失效,根據(jù)它的時間長短)
操作系統(tǒng)的內(nèi)核又把這個Ip地址返回給瀏覽器。
最終瀏覽器拿到了www.imooc.com對應(yīng)的IP 地址。
5.瀏覽器獲得域名對應(yīng)的IP地址后,就要發(fā)起TCP“三次握手”
瀏覽器就會以一個隨機(jī)端口,向web服務(wù)器(比如nginx 80端口)發(fā)起一個tcp的的鏈接請求。
這個TCP連接請求就會經(jīng)過層層的路由設(shè)備到達(dá)服務(wù)器端以后,進(jìn)入到網(wǎng)卡,然后進(jìn)入到內(nèi)核的TCP/IP協(xié)議棧,還有可能要經(jīng)過防火墻的過濾,最終到了web 服務(wù)端,最終建立了tcp/ip的連接。
這三次握手都做了什么呢?
客戶端對服務(wù)器說“你能聽到我說話么?咱倆聊會唄”
服務(wù)器對客戶端說“我能聽到你說話。咱倆聊會”
然后客戶端再對服務(wù)器說“好的,開始聊天吧!”
6.TCP/IP連接建立起來后,瀏覽器就可以向服務(wù)器發(fā)送HTTP請求了,比如說,用HTTP的get方法請求一個根域里的一個域名,協(xié)議可以采用HTTP 1.0的一個協(xié)議。
7.服務(wù)器端接受到了這個請求,根據(jù)路徑參數(shù),經(jīng)過后端的一些處理之后,把處理后的一個結(jié)果的數(shù)據(jù)返回給瀏覽器,如果是慕課網(wǎng)的頁面,就會把完整的HTML頁面代碼返回給瀏覽器。
8.瀏覽器拿到了完整的HTML頁面代碼。在解析和渲染這個頁面的時候,里面的JS,CSS ,圖片等靜態(tài)資源,他們同樣也是一個個HTTP請求,都需要經(jīng)過上面主要的七個步驟。
9.瀏覽器根據(jù)拿到的資源對頁面進(jìn)行渲染,最終把頁面呈現(xiàn)給用戶。
HTTP劃分為請求和響應(yīng)。
無論請求或響應(yīng),都具有http頭和正文信息。(這兩者是相同的)
http頭發(fā)送的是一些附加的信息:比如內(nèi)容類型,服務(wù)器發(fā)送響應(yīng)的日期,HTTP狀態(tài)碼
正文就是用戶提交的表單數(shù)據(jù),或者說是一個返回的數(shù)據(jù)。
相信看了本文案例你已經(jīng)掌握了方法,更多精彩請關(guān)注Gxl網(wǎng)其它相關(guān)文章!
推薦閱讀:
HTTP的基礎(chǔ)知識
javaScript的對象詳解
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com