http://www.360doc.com/content/17/0330/14/11277047_641420560.shtml
不管是前端還是后臺開發(fā),在找工作的時候,只要涉及到網(wǎng)絡(luò)方面的知識,必然會問到這樣一個問題:當(dāng)我在瀏覽器的地址欄里輸入一個完整的URL,在按下回車直至頁面加載完成,整個過程發(fā)生了什么?這是一道考察綜合能力的面試題,今天我們就一起來總結(jié)下該如 ...
不管是前端還是后臺開發(fā),在找工作的時候,只要涉及到網(wǎng)絡(luò)方面的知識,必然會問到這樣一個問題:當(dāng)我在瀏覽器的地址欄里輸入一個完整的URL,在按下回車直至頁面加載完成,整個過程發(fā)生了什么?這是一道考察綜合能力的面試題,今天我們就一起來總結(jié)下該如何回答這個問題,當(dāng)然我只是在這里講解主要的知識點,涉及到的細(xì)節(jié)還需要大家再去找資料看。
整體過程
在這整個過程中,大致可以分為以下幾個過程
DNS域名解析
TCP連接
HTTP請求
處理請求返回HTTP響應(yīng)
頁面渲染
關(guān)閉連接
DNS域名解析
首先我們應(yīng)該要知道的是,在地址欄輸入的域名并不是最后資源所在的真實位置,域名只是與IP地址的一個映射。網(wǎng)絡(luò)服務(wù)器的IP地址那么多,我們不可能去記一串串的數(shù)字,因此域名就產(chǎn)生了,域名解析的過程實際是將域名還原為IP地址的過程。
DNS域名解析有兩種方法,分別是迭代查詢和遞歸查詢
- 迭代查詢
[圖片上傳失敗...(image-3634a0-1512913615612)]
迭代查詢
- 遞歸查詢
[圖片上傳中...(image-e7d1b6-1512913615612-5)]
遞歸查詢
TCP連接
在通過第一步的DNS域名解析后,獲取到了服務(wù)器的IP地址,在獲取到IP地址后,便會開始建立一次連接,這是由TCP協(xié)議完成的,主要通過三次握手進(jìn)行連接。
三次握手的示意圖如下:
[圖片上傳中...(image-d14f20-1512913615612-4)]
三次握手
HTTP請求
在確認(rèn)與服務(wù)器建立連接后,便會發(fā)送一個HTTP請求,HTTP請求的報文主要包括請求行,請求頭,請求正文。
請求行的內(nèi)容一般類似于:GET index.html HTTP/1.1
請求頭的內(nèi)容一般如下,可以通過瀏覽器開發(fā)者工具查看
[圖片上傳中...(image-d06b56-1512913615612-3)]
請求頭
請求體一般包含請求傳遞的參數(shù)
[圖片上傳失敗...(image-4182f2-1512913615612)]
請求體
處理HTTP請求并響應(yīng)
服務(wù)器在收到瀏覽器發(fā)送的HTTP請求之后,會將收到的HTTP報文封裝成HTTP的Request對象,并通過不同的Web服務(wù)器進(jìn)行處理,處理完的結(jié)果以HTTP的Response對象返回,主要包括狀態(tài)碼,響應(yīng)頭,響應(yīng)報文三個部分。
狀態(tài)碼主要包括以下部分
1xx:指示信息–表示請求已接收,繼續(xù)處理。
2xx:成功–表示請求已被成功接收、理解、接受。
3xx:重定向–要完成請求必須進(jìn)行更進(jìn)一步的操作。
4xx:客戶端錯誤–請求有語法錯誤或請求無法實現(xiàn)。
5xx:服務(wù)器端錯誤–服務(wù)器未能實現(xiàn)合法的請求。
響應(yīng)頭主要由Cache-Control、 Connection、Date、Pragma等組成
響應(yīng)體為服務(wù)器返回給瀏覽器的信息,主要由HTML,css,js,圖片文件組成
頁面渲染
頁面DOM樹的渲染是個復(fù)雜的過程,需要深入了解DOM原理,這里簡要描述一下,主要過程如下
[圖片上傳失敗...(image-b14fb3-1512913615611)]
DOM樹渲染
關(guān)閉連接
在頁面元素傳輸完成后,會選擇關(guān)閉連接,此時用到的是TCP四次揮手,示意圖如下
[圖片上傳失敗...(image-4d6102-1512913615610)]
TCP四次揮手