1. 程式人生 > >從瀏覽器輸入URL到網頁載入完成,發生了什麼?

從瀏覽器輸入URL到網頁載入完成,發生了什麼?

這個我打算分為兩部門來說。第一部分是從鍵盤輸入到螢幕顯示URL;第二部分是按下回車後,到頁面載入的過程。

第一部分在(),本文將著重討論第二部分。

一、DNS解析

DNS解析的過程是一個先在本地機器上找,然後去網路上找的過程。首先,會先去瀏覽器快取中查詢,沒有就去本機的hosts檔案找。如果都沒找到相應域名的ip,那麼就去網路上找。網路中查詢的第一步就是先去本地的路由器找,本地路由器會有DNS快取,如果路由器快取中沒有,那麼就去ISP提供商的DNS伺服器上找,一般在這裡都能找得到。如果還沒有,就去根域名伺服器找,這個過程是基於UDP協議實現的遞迴查詢。以www.baidu.com域名的解析為例。

ISP的DSN伺服器先向根域名伺服器詢問, 你知道www.baidu.com的IP麼?根域名伺服器不負責管理具體的域名和Ip的關係,但是它知道管理.com這個域名的伺服器的地址,於是就將.com域名伺服器的地址發給ISP的DNS伺服器,DNS伺服器拿到.com域名伺服器的Ip後,就去這個IP詢問www.baidu.com這個域名的ip。這個.com域名伺服器並不知道www.baidu.com的地址,但是它知道baidu.com域名伺服器的地址。於是它將這個地址返回給ISP的DNS伺服器,然後ISP的DNS伺服器再去根據這個地址訪問baidu.com的伺服器,查詢www.baidu.com的ip。

二、Socket傳送http資料

有了IP之後,http協議的預設埠是80。有了埠和IP,那麼就可以通過TCP協議的三次握手建立連線,然後通過socket傳送HTTP資料。

三、伺服器接受資料

伺服器的有執行緒一直在監聽相應的埠,有socket請求到達時候,就將請求做分發。這個時候有負載均衡的策略,Ngix根據相應 的負載均衡策略,將請求傳送到不同的機器上。

四、伺服器處理資料

SpringMVC中的DispatcherServlet攔截到請求,然後DispatcherServlet將HandlerMapping傳送請求,HandlerMapping返回封裝了執行鏈的handler給DispatcherServlet。然後DispatcherServlet再將Handler將給Handler Adapter,Handler Adapter執行handler,然後返回ModelAndView給DispatcherServlet。接下來DispatcherServlet將ModelAndView交給檢視解析器,檢視解析器返回相應的檢視。然後檢視交給Velocity渲染。

五、伺服器返回資料

伺服器通過socket傳送response資料給瀏覽器。

六、瀏覽器收到資料

解析html構建dom樹->構建render樹->佈局render樹->繪製render樹