1、輸入網(wǎng)址
輸入網(wǎng)址比如www.百度.com時游覽器就可以在書簽或者歷史記錄里面去搜索相關的網(wǎng)址推薦給你。
2、dns解析
瀏覽器上輸入地址時,如www.baidu.com,需要把這個地址解析成ip地址,其中就需要dns解析。
dns域名

DNS(Domain Name System)是域名系統(tǒng)的英文縮寫,他的服務是用來將主機名和域名轉換為ip地址的工作。
請求發(fā)起后,游覽器首先會解析這個域名,首先它會查看本地硬盤的 hosts 文件,看看其中有沒有和這個域名對應的規(guī)則,如果有的話就直接使用 hosts 文件里面的 ip 地址。(這也是我們本地開發(fā)時修改host文件實現(xiàn)代理的原理)
如果在本地的 hosts 文件沒有能夠找到對應的 ip 地址,瀏覽器會發(fā)出一個 DNS請求到本地DNS(域名分布系統(tǒng))服務器 。本地DNS服務器一般都是你的網(wǎng)絡接入服務器商提供,比如中國電信,中國移動。
查詢你輸入的網(wǎng)址的DNS請求到達本地DNS服務器之后,本地DNS服務器會首先查詢它的緩存記錄,如果緩存中有此條記錄,就可以直接返回結果,此過程是遞歸的方式進行查詢。如果沒有,本地DNS服務器還要向DNS根服務器進行查詢
根DNS服務器沒有記錄具體的域名和IP地址的對應關系,而是告訴本地DNS服務器,你可以到域服務器上去繼續(xù)查詢,并給出域服務器的地址。這種過程是迭代的過程
本地DNS服務器繼續(xù)向域服務器發(fā)出請求,在這個例子中,請求的對象是.com域服務器。.com域服務器收到請求之后,也不會直接返回域名和IP地址的對應關系,而是告訴本地DNS服務器,你的域名的解析服務器的地址
-
最后,本地DNS服務器向域名的解析服務器發(fā)出請求,這時就能收到一個域名和IP地址對應關系,本地DNS服務器不僅要把IP地址返回給用戶電腦,還要把這個對應關系保存在緩存中,以備下次別的用戶查詢時,可以直接返回結果,加快網(wǎng)絡訪問。
dns解析.jpg
3、建立TCP鏈接
在拿到域名對應的IP地址后,會以隨機端口(1024~~65535)向WEB服務器程序80端口發(fā)起TCP的連接請求,這個連接請求進入到內核的TCP/IP協(xié)議棧(用于識別該連接請求,解封包,一層一層的剝開),還有可能要經(jīng)過Netfilter防火墻(屬于內核的模塊)的過濾,最終到達WEB程序,最終建立了TCP/IP的連接,對于客戶端與服務器的TCP鏈接,必然要說的就是『三次握手』 http://www.itdecent.cn/p/3a40ff77d8d3
4、游覽器向WEB服務器發(fā)起Http請求
建立TCP連接之后,發(fā)起HTTP請求,請求一般分為三部分
請求方法URI協(xié)議/版本
請求頭(Request Header)
請求正文
下面是一個完整的請求

5、服務器端處理并返回HTTP報文
服務器端收到請求后的由web服務器(準確說應該是http服務器)處理請求,諸如Apache、Ngnix、IIS等。web服務器解析用戶請求,知道了需要調度哪些資源文件,再通過相應的這些資源文件處理用戶請求和參數(shù),并調用數(shù)據(jù)庫信息,最后將結果通過web服務器返回給瀏覽器客戶端。
HTTP響應報文也是由三部分組成: 狀態(tài)碼, 響應報頭和響應報文。
狀態(tài)碼
狀態(tài)碼是由3位數(shù)組成,第一個數(shù)字定義了響應的類別,且有五種可能取值:
1xx:指示信息–表示請求已接收,繼續(xù)處理。
2xx:成功–表示請求已被成功接收、理解、接受。
3xx:重定向–要完成請求必須進行更進一步的操作。
4xx:客戶端錯誤–請求有語法錯誤或請求無法實現(xiàn)。
5xx:服務器端錯誤–服務器未能實現(xiàn)合法的請求。
平時遇到比較常見的狀態(tài)碼有:200, 204, 301, 302, 304, 400, 401, 403, 404, 422, 500(分別表示什么請自行查找)。
響應報頭
常見的響應報頭字段有: Server, Connection...。
響應報文
服務器返回給瀏覽器的文本信息,通常HTML, CSS, JS, 圖片等文件就放在這一部分。

6、關閉TCP鏈接
為了避免服務器與客戶端雙方的資源占用和損耗,當雙方?jīng)]有請求或響應傳遞時,任意一方都可以發(fā)起關閉請求。與創(chuàng)建TCP連接的3次握手類似,關閉TCP連接,需要4次握手http://www.itdecent.cn/p/3a40ff77d8d3
7、游覽器解析資源
對于獲取到的HTML、CSS、JS、圖片等等資源。
瀏覽器通過解析HTML,生成DOM樹,解析CSS,生成CSS規(guī)則樹,然后通過DOM樹和CSS規(guī)則樹生成渲染樹。渲染樹與DOM樹不同,渲染樹中并沒有head、display為none等不必顯示的節(jié)點。
在解析CSS的同時,可以繼續(xù)加載解析HTML,但在解析執(zhí)行JS腳本時,會停止解析后續(xù)HTML,這就會出現(xiàn)阻塞問題,關于JS阻塞相關問題。

8、游覽器布局渲染
根據(jù)渲染樹布局,計算CSS樣式,即每個節(jié)點在頁面中的大小和位置等幾何信息。HTML默認是流式布局的,CSS和js會打破這種布局,改變DOM的外觀樣式以及大小和位置。這時就要提到兩個重要概念:repaint和reflow。http://www.itdecent.cn/p/a18318c735c0
參考:https://blog.csdn.net/qq_29311407/article/details/79988700
https://www.cnblogs.com/yuanzhiguo/p/8119470.html
https://segmentfault.com/a/1190000006879700
