詳解--從地址欄輸入url到頁面展示中間都發生了什麼?

這是一個綜合性很強的問題,我的理解包含如下七個基本點:瀏覽器

   1.在瀏覽器地址欄輸入url並按下回車。緩存

   2.瀏覽器檢查當前url是否存在緩存和緩存是否過時。服務器

   3.域名解析(DNS解析url對應的ip)。tcp

   4.根據ip創建tcp連接(三次握手)。url

   5.用當前url發送http請求。code

   6.服務器處理請求,瀏覽器接收響應。blog

   7.瀏覽器渲染頁面。圖片

 

接下來分析一下每個基本點所幹的事情:ip

  1.在瀏覽器地址欄輸入url並按下回車。資源

  分析:略

 

  2.瀏覽器檢查當前url是否存在緩存和緩存是否過時。

  分析:瀏覽器檢查當前url是否存在緩存,若是存在,則檢查緩存資源是否過時,若是不存在直接進入階段3。若是資源過時進入階段3,沒有過時則直接使用。

 

  3.域名解析(DNS解析url對應的ip)。

  分析:域名解析其實是將域名解析爲ip地址的過程。

     首先,瀏覽器會檢查本地hosts文件中是否有此url的映射關係,若是有就調用這個ip地址映射,完成域名解析。

     若是沒有,則會查找本地DNS解析器緩存,若是查找到則返回。

     若是仍是沒有,則會查找本地DNS服務器,若是查找到則返回。

     最後迭代查詢,按根域服務器 ->頂級域(.com)->第二層域(yeahfei.com) ->子域(admin.yeahfei.com)的順序找到IP地址。

 

  4.根據ip創建tcp連接(三次握手)。

  分析:經過第3階段已經拿到了服務器的ip地址,在獲取到IP地址後,便會開始創建一次鏈接,這是由TCP協議完成的,主要經過三次握手進行鏈接。

    第一次握手: 創建鏈接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SENT狀態,等待服務器確認; 

    第二次握手: 服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;

    第三次握手: 客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP鏈接成功)狀態,完成                                       三次握手。

     

  

  5.用當前url發送http請求。

  分析:略

  

  6.服務器處理請求,瀏覽器接收響應。

  分析:略

  

  7.瀏覽器渲染頁面。

  分析:若是說響應的內容是HTML文檔的話,就須要瀏覽器進行解析渲染呈現給用戶。整個過程涉及兩個方面:解析和渲染。在渲染頁面以前,須要構建DOM樹和CSSOM樹。

       在瀏覽器還沒接收到完整的 HTML 文件時,它就開始渲染頁面了,在遇到外部鏈入的腳本標籤或樣式標籤或圖片時,會再次發送 HTTP 請求重複上述的步驟。在收到 CSS 文件後會對已經渲染的頁面從新渲染,加入它們應有的樣式,圖片文件加載完馬上顯示在相              應位置。在這一過程當中可能會觸發頁面的重繪或重排。

相關文章
相關標籤/搜索