當我們開啟網頁時,瀏覽器做了什麼???

2021-10-07 15:21:19 字數 2047 閱讀 2781

問題:請談談從瀏覽器輸入url到拿到網頁的整個過程

當你在搜尋欄輸入 ,瀏覽器進行url解析。

看到https,就知道要訪問的是web伺服器,www.baidu.com是web伺服器的名字。根據上面的解析結果生成http請求資訊。

瀏覽器生成了http請求之後(如果業務有加密需要的話,可以使用https),需要作業系統把資料發出去,核心協議棧用的是ip,並不是網域名稱,所以要進行網域名稱解析。web瀏覽器中的gethostbyname,就可以獲得ip位址。

獲得目標ip位址,瀏覽器呼叫socket,委託核心幫忙傳送資料。

傳送請求之後,會得到伺服器的響應資訊,解析報文,對於html檔案,呼叫排版引擎、js引擎等來處理,然後瀏覽器展示。(近期訪問過的網頁,很可能快取在本地,這樣再次訪問,就不需要去伺服器拿資料,提高響應速度)

ps:gethostbyname函式內部就是生成dns查詢訊息,傳送udp查詢到dns伺服器,得到dns伺服器的響應,從響應訊息中取出ip。國內的三大運營商的通用dns:144.144.144.144;還可以使用一種更加精準的位址簿查詢協議httpdns

ps:dns系統是三層樹狀、分布式服務。目前全球有13臺根網域名稱伺服器,又有幾百台映象,保證一定能被訪問到。在查詢網域名稱www.baidu.com對應的ip時,首先訪問根網域名稱伺服器,它告訴我們com伺服器的位址;訪問com網域名稱伺服器,它告訴我們baidu.com的位址;最後訪問baidu.com網域名稱伺服器,得到www.baidu.com的位址。

加速網域名稱解析的一些手段:

http協議底層用的是tcp協議(面向連線的,tcp會保證這個包能夠到達目的地。如果不能到達,就會重新傳送,直至到達),所以要經過三次握手進行連線,傳送資料,最後四次揮手斷開連線。核心協議棧主要是將應用層http請求按照tcp/ip協議棧的要求,經過層層封裝成幀,然後將報文的類似0101001串轉換成電訊號傳送出去。這裡要注意mac頭部的目標機器mac,是下一跳的mac,如果當前機器沒有快取,就需要arp廣播,先得到去往目標機器的下一跳機器的mac。這樣才能逐跳**。還有區域網的ip位址也不能在公網上使用,所以在出閘道器的時候,ip位址通過nat轉換成公網位址。閘道器往往是乙個路由器,到某個ip位址應該怎麼走叫做路由表。常見的路由協議有ospf和bgp。

目標伺服器得到客戶端的http請求,如果找到相應的資源檔案,組成http響應報文,將資源傳送回來,如果沒有找到,就會給課戶端返回404錯誤。

目標**的伺服器對外表現是乙個ip,為了能夠抗住高併發,內部往往是一套非常複雜的架構,入口有負載均衡裝置,比如四層的lvs和七層的nginx,後面又許多伺服器構成乙個集群。

負載均衡伺服器先訪問記憶體級的快取,比如redis,把頻繁訪問的資料快取幾秒到幾分鐘,減輕後端伺服器的壓力。如果快取沒有相應的資料,再把請求**給應用伺服器,應用伺服器如果需要資料,再訪問後端的資料庫伺服器,為了提高資料庫併發能力,可以做成讀寫分離,目前主流的資料庫都實現了這個功能。

在伺服器端如何告訴相關的程序呢?使用往往通過 rpc 呼叫,即遠端過程呼叫的方式來實現。

cdn的中文名稱是內容分發網路,它主要解決的問題是就近訪問的問題。cdn分發源站的內容,也就是把源站的內容快取在各個節點上。使用者上網就不直接訪問源站的內容,而是訪問距離它最近的乙個cdn節點,術語叫做邊緣節點,其實就是快取了源站的內容,就是源站的乙個**伺服器,避免遠距離訪問源站,實現網路加速。

cdn只能快取最常見的資源。如果訪問的資源就在cdn快取中,也就是命中了,直接返回客戶端;如果沒有命中,則要去源站取資料,也叫回源。我們應該盡可能提高命中率,降低回源率。

瀏覽器主要傳送http請求,接收http響應,然後進行渲染,展示到介面。

http底層走的是tcp/ip,如果不知道ip,就需要dns協議解析。

tcp連線後收發http資料報

為了降低伺服器壓力,加快訪問速度,有很快取,比如客戶端快取,cdn快取,負載均衡快取等

協議的三要素:

下圖是osi七層模型中的每一層所對應的網路協議:

當我們開啟網頁時,瀏覽器究竟做了什麼

面試的時候經常被問到 在瀏覽器中輸入會發生什麼?那麼就利用這篇部落格來總結一下,在這個過程中瀏覽器究竟做了什麼 總體來說,會有以下幾個過程 1 dns網域名稱解析 2 建立tcp連線 三次握手 3 http發起請求 4 瀏覽器接收http響應 5 渲染頁面 6 關閉tcp連線 四次揮手 在瀏覽器輸入...

指定瀏覽器開啟網頁

如果在你的android系統上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?答案當然是 肯定的。具體方法如下 intent intent new intent intent.setaction android.intent.action.view uri content uri browsers ...

指定瀏覽器開啟網頁

如果在你的android系統上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?答案當然是 肯定的。具體方法如下 intent intent new intent intent.setaction android.intent.action.view uri content uri browsers ...