從輸入URL到頁面加載完成

1)把URL分割成幾個部分:協議、網絡地址、資源路徑。其中網絡地址指示該連接網絡上哪一臺計算機,可以是域名或者IP地址,可以包括端口號;協議是從該計算機獲取資源的方式,常見的是HTTP、FTP,不同協議有不同的通訊內容格式;資源路徑指示從服務器上獲取哪一項資源。
例如:http://www.guokr.com/question/554991/
協議部分:http
網絡地址:www.guokr.com

資源路徑:/question/554991/


2)如果地址不是一個IP地址,通過DNS(域名系統)將該地址解析成IP地址。IP地址對應着網絡上一臺計算機,DNS服務器本身也有IP,你的網絡設置包含DNS服務器的IP。
例如:www.guokr.com 不是一個IP,向DNS詢問請求www.guokr.com 對應的IP,獲得IP: 111.13.57.142。這個過程裏,你的電腦直接詢問的DNS服務器可能沒有www.guokr.com 對應的IP,就會向它的上級服務器詢問,上級服務器同樣可能沒有,就依此一層層向上找,最高可達根節點,找到或者全部找不到爲止


3)如果地址不包含端口號,根據協議的默認端口號確定一個。端口號之於計算機就像窗口號之於銀行,一家銀行有多個窗口,每個窗口都有個號碼,不同窗口可以負責不同的服務。端口只是一個邏輯概念,和計算機硬件沒有關係。
例如:www.guokr.com 不包含端口號,http協議默認端口號是80。如果你輸入的url是http://www.guokr.com:8080/ ,那表示不使用默認的端口號,而使用指定的端口號8080。


4)向2和3確定的IP和端口號發起網絡連接。
例如:向111.13.57.142的80端口發起連接


5)根據http協議要求,組織一個請求的數據包,裏面包含大量請求信息,包括請求的資源路徑、你的身份
例如:用自然語言來表達這個數據包,大概就是:請求 /question/554991/ ,我的身份是xxxxxxx。

6)服務器響應請求,將數據返回給瀏覽器。數據可能是根據HTML協議組織的網頁,裏面包含頁面的佈局、文字。數據也可能是圖片、腳本程序等。現在你可以用瀏覽器的“查看源代碼”功能,感受一下服務器返回的是什麼東東。如果資源路徑指示的資源不存在,服務器就會返回著名的404錯誤。


7)如果(6)返回的是一個頁面,根據頁面裏一些外鏈的URL,例如圖片的地址,按照(1)-(6)再次獲取。


8)開始根據資源的類型,將資源組織成屏幕上顯示的圖像,這個過程叫渲染,網頁渲染是瀏覽器最複雜、最核心的功能。

9)將渲染好的頁面圖像顯示出來,並開始響應用戶的操作。

以上只是最基本的步驟,實際不可能就這麼簡單,一些可選的步驟例如網頁緩存、連接池、加載策略、加密解密、代理中轉等等都沒有提及。即使基本步驟本身也有很複雜的子步驟,TCP/IP、DNS、HTTP、HTML:每一個都可以展開成龐大的課題,而瀏覽器的基礎——操作系統、編譯器、硬件等更是一個比一個複雜。不是計算機專業的同學看了上面的解釋完全不明白是很正常的,可能會問爲什麼要搞得那麼複雜,但我保證這每一個步驟都經過深思熟慮和時間的考驗。你輸入URL即可瀏覽互聯網,而計算機系統在背後做了無數你看不到的工作,計算機各個子領域無數工程師爲此付出你難以想象的努力。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章