輸入地址
當咱們開始在瀏覽器中輸入網址www.baidu.com的時候,瀏覽器其實就已經在智能的匹配可能的url 了,他會從歷史記錄,書籤等地方,找到已經輸入的字符串可能對應的 url,而後給出智能提示,讓你能夠補全url地址。對於 google的chrome 的瀏覽器,他甚至會直接從緩存中把網頁展現出來,就是說,你尚未按下 enter,頁面就出來了。html
瀏覽器查找域名的 IP 地址
一、請求一旦發起,瀏覽器首先要作的事情就是解析這個域名,通常來講,瀏覽器會首先查看本地硬盤的 hosts 文件,看看其中有沒有和這個域名對應的規則,若是有的話就直接使用 hosts 文件裏面的 ip 地址。chrome
二、若是在本地的 hosts 文件沒有可以找到對應的 ip 地址,瀏覽器會發出一個 DNS請求到本地DNS服務器(若是是首次,因爲沒有DNS服務器的MAC地址,因此只須要將數據發送給網關路由器192.168.1.1(經過ARP獲取其MAC地址),他會想辦法發給DNS服務器)。本地DNS服務器通常都是你的網絡接入服務器商提供,好比中國電信,中國移動。後端
三、查詢你輸入的網址的DNS請求到達本地DNS服務器以後,本地DNS服務器會首先查詢它的緩存記錄,若是緩存中有此條記錄,就能夠直接返回結果,此過程是遞歸的方式進行查詢。若是沒有,本地DNS服務器還要向DNS根域名服務器進行查詢。瀏覽器
四、根域名DNS服務器沒有記錄具體的域名和IP地址的對應關係,而是告訴本地DNS服務器,你能夠到頂級域服務器上去繼續查詢,並給出頂級域服務器的地址。這種過程是迭代的過程。緩存
五、本地DNS服務器繼續向其餘域名服務器發出請求,在這個例子中,請求的對象是.com域名服務器。.com域名服務器收到請求以後,也不會直接返回域名和IP地址的對應關係,而是告訴本地DNS服務器,你的域名的解析服務器的地址。安全
六、最後,本地DNS服務器向域名的解析服務器發出請求,這時就能收到一個域名和IP地址220.181.27.48對應關係,本地DNS服務器不只要把IP地址返回給用戶電腦,還要把這個對應關係保存在緩存中,以備下次別的用戶查詢時,能夠直接返回結果,加快網絡訪問。服務器
網絡部分
一、應用層DNS解析域名發起HTTP請求報文(域名 to IP)
經過這個IP地址找到客戶端到服務器的路徑。客戶端瀏覽器發起一個HTTP會話(HTTP請求包)到220.181.27.48。而後經過傳輸層(TCP進行封裝數據包,輸入到網絡層)。cookie
其中:http請求包括網絡
請求行:GET/POST…,目標URL,HTTP 版本佈局
請求頭:客戶端的Cookie和User-Agent就放在這裏
請求體:好比客戶端POST的數據就放在這裏(對比:GET的數據放在請求行的URL裏).
二、傳輸層TCP分割成報文段並加端口
在傳輸層(TCP 協議)把從應用層處收到的數據(HTTP 請求報文)進行分割(報文段),並在各個報文上打上標記序號及端口號後轉發給網絡層。
TCP協議爲傳輸報文提供可靠的字節流服務。它爲了方便傳輸,將大塊的數據分割成以報文段爲單位的數據包進行管理,併爲它們編號,方便服務器接收時能準確地還原報文信息。把HTTP會話請求分紅報文段,添加源和目的端口,如服務器使用80端口監聽客戶端的請求,客戶端由系統隨機選擇一個端口如5000,與服務器進行交換,服務器把相應的請求返回給客戶端的5000端口。而後使用網絡層的IP地址查找目的端。TCP協議經過「三次握手」等方法保證傳輸的安全可靠。
三、網絡層查找MAC地址(路由器)(IP、ICMP、ARP、RARP)(IP to MAC)
IP協議的做用是把TCP分割好的各類數據包加上IP首部後傳送給接收方。而要保證確實能傳到接收方還須要接收方的MAC地址,也就是物理地址。IP地址和MAC地址是一一對應的關係。ARP協議能夠將IP地址解析成對應的MAC地址。當通訊的雙方不在同一個局域網時,須要屢次中轉才能到達最終的目標,在中轉的過程當中須要經過下一個中轉站(交換機)的MAC地址來搜索下一個中轉目標。
四、網絡接口層
在找到對方的MAC地址後,就將數據發送到數據鏈路層傳輸,由數據鏈路層的網橋、交換機根據mac地址進行端口轉發,再由物理層的中繼器、集線器進行信號傳輸放大等。這時,客戶端發送請求的階段結束
五、服務器接收數據
接收端的服務器在鏈路層接收到數據包,再層層向上直到應用層。這過程當中包括在傳輸層經過TCP協議將分段的數據包從新組成原來的HTTP請求報文。
六、服務器響應請求,返回HTTP響應
服務接收到客戶端發送的HTTP請求後,查找客戶端請求的資源,並返回響應報文,響應報文中包括一個重要的信息——狀態碼。狀態碼由三位數字組成,其中比較常見的是200 OK表示請求成功。301表示永久重定向,即請求的資源已經永久轉移到新的位置。在返回301狀態碼的同時,響應報文也會附帶重定向的url,客戶端接收到後將http請求的url作相應的改變再從新發送。404 not found 表示客戶端請求的資源找不到。
其中:HTTP響應以下
響應行:HTTP版本,狀態碼,狀態碼描述
響應頭:set-cookies,server信息
響應體:cookie,html,image,後端返回的請求數據等等
七、服務器返回相應文件
請求成功後,服務器會返回相應的HTML文件。接下來就到了頁面的渲染階段了。
4、瀏覽器方面:頁面渲染,顯示HTML
現代瀏覽器渲染頁面的過程是這樣的:
解析HTML以構建DOM樹 –> 構建渲染樹 –> 佈局渲染樹 –> 繪製渲染樹。
DOM樹是由HTML文件中的標籤排列組成,渲染樹是在DOM樹中加入CSS或HTML中的style樣式而造成。渲染樹只包含須要顯示在頁面中的DOM元素,像<head>元素或display屬性值爲none的元素都不在渲染樹中。
在瀏覽器還沒接收到完整的HTML文件時,它就開始渲染頁面了,在遇到外部鏈入的腳本標籤或樣式標籤或圖片js時,html文檔會掛起渲染(加載解析渲染同步)的線程,不只要等待文檔中js文件加載完畢,還要等待解析執行完畢,才能夠恢復html文檔的渲染線程。會再次發送HTTP請求重複上述的步驟(有時候服務器會把可能客戶端還須要的數據一塊兒繼續發送過來,客戶端能夠不用再次發送HTTP請求)。在收到CSS文件後會對已經渲染的頁面從新渲染,加入它們應有的樣式,圖片文件加載完馬上顯示在相應位置。在這一過程當中可能會觸發頁面的重繪或重排。原文:https://blog.csdn.net/qq_35642036/article/details/82788884