從輸入 URL 到頁面加載完成發生了什麼事

看到 這篇文章,重拾計算機網絡的知識,決定班門弄斧寫一篇瀏覽器

下面的討論基於最簡單的情景:HTTP、無代理、不討論功夫王、IPv4,並簡單得從三個方面闡述。緩存

瀏覽器會作些什麼

  1. 接收 URL,並拆分紅協議,網絡地址,資源路徑
  2. 與緩存進行比對,若是請求的對象在緩存中,則直接進行第九步
  3. 若是網絡地址不是一個 IP 地址,向操做系統詢問,操做系統返回一個IP地址
  4. 瀏覽器向服務器發起一個 TCP 鏈接
  5. 瀏覽器經過 TCP 鏈接向服務器發起 HTTP 請求,HTTP 三次握手,HTTPS 握手過程則複雜得多
  6. 瀏覽器接受 HTTP 響應,這時候它能關閉 TCP 鏈接也能爲另外一個鏈接保留。
  7. 檢查 HTTP header 裏的狀態碼,並作出不一樣的處理方式。好比:錯誤(4XX5XX),重定向(3XX),受權請求(2XX
  8. 若是是能夠緩存的,這個響應則會被存儲起來
  9. 瀏覽器進行解碼響應,並決定如何處理該響應(好比HTML頁面,圖像,聲音等等)
  10. 瀏覽器渲染響應,或者爲不能識別的類型提供下載的提示框

瀏覽器主要組件:服務器

瀏覽器主要組件

操做系統會作些什麼

客戶端

  1. 檢查域名是否在本地的 host 的文件中,在則直接返回 IP 地址,不在則向 DNS 服務器請求
  2. DNS 服務器一級一級往上查詢,直到查詢到 IP 地址

服務器端

  1. 驗證鏈接是否合法,如客戶端 IP 地址是否符合防火牆的規則,端口號是否開啓等
  2. 將請求轉發到相應的端口
  3. 記錄相應事件

Web 服務器會作些什麼

  1. 創建鏈接:接受一個客戶端,或者若是不但願與這個客戶端不能簡歷鏈接,就將其關閉
  2. 接收請求:從網絡中讀取一條 HTTP 請求報文
  3. 處理請求:對請求報文進行解釋,並採起行動
  4. 訪問資源:訪問報文中指定的資源
  5. 構建響應:建立帶有正確首部的 HTTP 響應報文
  6. 發送響應:將響應回送給客戶端
  7. 記錄事務處理過程:將已完成事務相關的內容記錄在一個日誌文件中

Screenshot from 2015-03-21 12:58:43.png



輸入 URL 便能瀏覽互聯網,其背後的計算機系統卻要完成無數工做。上述過程當中的每一步的背後都蘊含着無數人的智慧,每一步均可以展開成龐大的課題,真實的情景也要比提到的複雜不少。我想這正是科技最大的魅力,身處其中並得益於此,感謝各個領域的無數工程師爲此付出的努力。網絡

相關文章
相關標籤/搜索