看到 這篇文章,重拾計算機網絡的知識,決定班門弄斧寫一篇瀏覽器
下面的討論基於最簡單的情景:HTTP、無代理、不討論功夫王、IPv4,並簡單得從三個方面闡述。緩存
瀏覽器會作些什麼
- 接收 URL,並拆分紅協議,網絡地址,資源路徑
- 與緩存進行比對,若是請求的對象在緩存中,則直接進行第九步
- 若是網絡地址不是一個 IP 地址,向操做系統詢問,操做系統返回一個IP地址
- 瀏覽器向服務器發起一個 TCP 鏈接
- 瀏覽器經過 TCP 鏈接向服務器發起 HTTP 請求,HTTP 三次握手,HTTPS 握手過程則複雜得多
- 瀏覽器接受 HTTP 響應,這時候它能關閉 TCP 鏈接也能爲另外一個鏈接保留。
- 檢查 HTTP header 裏的狀態碼,並作出不一樣的處理方式。好比:錯誤(
4XX
、5XX
),重定向(3XX
),受權請求(2XX
)
- 若是是能夠緩存的,這個響應則會被存儲起來
- 瀏覽器進行解碼響應,並決定如何處理該響應(好比HTML頁面,圖像,聲音等等)
- 瀏覽器渲染響應,或者爲不能識別的類型提供下載的提示框
瀏覽器主要組件:服務器
![瀏覽器主要組件](http://static.javashuo.com/static/loading.gif)
操做系統會作些什麼
客戶端
- 檢查域名是否在本地的 host 的文件中,在則直接返回 IP 地址,不在則向 DNS 服務器請求
- DNS 服務器一級一級往上查詢,直到查詢到 IP 地址
服務器端
- 驗證鏈接是否合法,如客戶端 IP 地址是否符合防火牆的規則,端口號是否開啓等
- 將請求轉發到相應的端口
- 記錄相應事件
Web 服務器會作些什麼
- 創建鏈接:接受一個客戶端,或者若是不但願與這個客戶端不能簡歷鏈接,就將其關閉
- 接收請求:從網絡中讀取一條 HTTP 請求報文
- 處理請求:對請求報文進行解釋,並採起行動
- 訪問資源:訪問報文中指定的資源
- 構建響應:建立帶有正確首部的 HTTP 響應報文
- 發送響應:將響應回送給客戶端
- 記錄事務處理過程:將已完成事務相關的內容記錄在一個日誌文件中
![Screenshot from 2015-03-21 12:58:43.png](http://static.javashuo.com/static/loading.gif)
輸入 URL 便能瀏覽互聯網,其背後的計算機系統卻要完成無數工做。上述過程當中的每一步的背後都蘊含着無數人的智慧,每一步均可以展開成龐大的課題,真實的情景也要比提到的複雜不少。我想這正是科技最大的魅力,身處其中並得益於此,感謝各個領域的無數工程師爲此付出的努力。網絡