瀏覽器輸入以後發生了什麼

  1. 用戶輸入URL,瀏覽器會根據用戶輸入的信息判斷是搜索仍是網址,若是是搜索內容,就將搜索內容+默認搜索引擎合成新的URL;若是用戶輸入的內容符合URL規則,瀏覽器就會根據URL協議,在這段內容上加上協議合成合法的URL
  2. 用戶輸入完內容,按下回車鍵,瀏覽器導航欄顯示loading狀態,可是頁面仍是呈現前一個頁面,這是由於新頁面的響應數據尚未得到
  3. 瀏覽器進程瀏覽器構建請求行信息,會經過進程間通訊(IPC)將URL請求發送給網絡進程 GET /index.html HTTP1.1
  4. 網絡進程獲取到URL,先去本地緩存中查找是否有緩存文件,若是有,攔截請求,直接200返回;不然,進入網絡請求過程
  5. 網絡進程請求DNS返回域名對應的IP和端口號,若是以前DNS數據緩存服務緩存過當前域名信息,就會直接返回緩存信息;不然,發起請求獲取根據域名解析出來的IP和端口號,若是沒有端口號,http默認80,https默認443。若是是https請求,還須要創建TLS鏈接。
  6. Chrome 有個機制,同一個域名同時最多隻能創建 6 個TCP 鏈接,若是在同一個域名下同時有 10 個請求發生,那麼其中 4 個請求會進入排隊等待狀態,直至進行中的請求完成。若是當前請求數量少於6個,會直接創建TCP鏈接。
  7. TCP三次握手創建鏈接,http請求加上TCP頭部——包括源端口號、目的程序端口號和用於校驗數據完整性的序號,向下傳輸
  8. 網絡層在數據包上加上IP頭部——包括源IP地址和目的IP地址,繼續向下傳輸到底層
  9. 底層經過物理網絡傳輸給目的服務器主機
  10. 目的服務器主機網絡層接收到數據包,解析出IP頭部,識別出數據部分,將解開的數據包向上傳輸到傳輸層
  11. 目的服務器主機傳輸層獲取到數據包,解析出TCP頭部,識別端口,將解開的數據包向上傳輸到應用層
  12. 應用層HTTP解析請求頭和請求體,若是須要重定向,HTTP直接返回HTTP響應數據的狀態code301或者302,同時在請求頭的Location字段中附上重定向地址,瀏覽器會根據code和Location進行重定向操做;若是不是重定向,首先服務器會根據 請求頭中的If-None-Match 的值來判斷請求的資源是否被更新,若是沒有更新,就返回304狀態碼,至關於告訴瀏覽器以前的緩存還可使用,就不返回新數據了;不然,返回新數據,200的狀態碼,而且若是想要瀏覽器緩存數據的話,就在相應頭中加入字段: Cache-Control:Max-age=2000 響應數據又順着應用層——傳輸層——網絡層——網絡層——傳輸層——應用層的順序返回到網絡進程
  13. 數據傳輸完成,TCP四次揮手斷開鏈接。若是,瀏覽器或者服務器在HTTP頭部加上以下信息,TCP就一直保持鏈接。保持TCP鏈接能夠省下下次須要創建鏈接的時間,提示資源加載速度 Connection:Keep-Alive
  14. 網絡進程將獲取到的數據包進行解析,根據響應頭中的Content-type來判斷響應數據的類型,若是是字節流類型,就將該請求交給下載管理器,該導航流程結束,再也不進行;若是是text/html類型,就通知瀏覽器進程獲取到文檔準備渲染
  15. 瀏覽器進程獲取到通知,根據當前頁面B是不是從頁面A打開的而且和頁面A是不是同一個站點(根域名和協議同樣就被認爲是同一個站點),若是知足上述條件,就複用以前網頁的進程,不然,新建立一個單獨的渲染進程
  16. 瀏覽器會發出「提交文檔」的消息給渲染進程,渲染進程收到消息後,會和網絡進程創建傳輸數據的「管道」,文檔數據傳輸完成後,渲染進程會返回「確認提交」的消息給瀏覽器進程
  17. 瀏覽器收到「確認提交」的消息後,會更新瀏覽器的頁面狀態,包括了安全狀態、地址欄的 URL、前進後退的歷史狀態,並更新web頁面,此時的web頁面是空白頁
  18. 渲染進程對文檔進行頁面解析和子資源加載,HTML 經過HTM 解析器轉成DOM Tree(二叉樹相似結構的東西),CSS按照CSS 規則和CSS解釋器轉成CSSOM TREE,兩個tree結合,造成render tree(不包含HTML的具體元素和元素要畫的具體位置),經過Layout能夠計算出每一個元素具體的寬高顏色位置,結合起來,開始繪製,最後顯示在屏幕中新頁面顯示出來
相關文章
相關標籤/搜索