2010-01-19 75 views
265

有人能告訴我從瀏覽器中輸入URL的時間到在瀏覽器上看到頁面的時間,幕後發生了什麼?這個過程的詳細說明會有很大的幫助。當你在瀏覽器中輸入URL時會發生什麼

+2

儘管這可能與編程有關(最終) - 這可以回答的詳細程度將(並且)填充了卷。請重申爲編程查詢。 – KevinDTimm 2010-01-19 09:48:19

+0

研究維基百科上的DNS以開始使用。 – 2010-01-19 09:53:09

+21

獲取O'Reilly的* DNS和綁定*書。它只有624頁。 – 2010-01-19 09:57:11

回答

37

首先計算機查找目標主機。如果它存在於本地DNS緩存中,它將使用該信息。否則,將執行DNS查詢,直到找到IP地址。

然後,您的瀏覽器打開一個到目標主機的TCP連接,並根據HTTP 1.1發送請求(或者可能使用HTTP 1.0,但普通瀏覽器不會再這樣做)。

服務器查找所需的資源(如果存在的話),並且使用HTTP協議進行響應,將數據發送到所述客戶端(=你的瀏覽器)

然後,瀏覽器使用HTML解析器來重新創建文件結構,該結構稍後在屏幕上呈現給您。如果它發現對外部資源(如圖片,css文件,JavaScript文件)的引用,則這些文件以與HTML文檔本身相同的方式傳遞。假設最簡單的HTTP請求(沒有HTTPS,沒有HTTP2,沒有額外的),最簡單的DNS,沒有代理,單棧IPv4,只有一個HTTP請求(

557

注意:這是一個非常粗糙和過於簡化草圖,另一端是一個簡單的HTTP服務器,並且在任何步驟中都沒有問題。對於大多數當代意圖和目的而言,這是一種不切實際的情景;所有這些在實際使用中都要複雜得多,而且自從寫成這個技術堆棧以來,這個技術堆棧就變得更加複雜了。考慮到這一點,以下時間線仍然有些有效:

  1. 瀏覽器檢查緩存;如果請求的對象是在緩存中,是新鮮的,跳到#9
  2. 瀏覽器請求OS服務器的IP地址
  3. OS使得DNS查詢和回覆的IP地址,瀏覽器
  4. 瀏覽器打開一個TCP連接到服務器(這個步驟是複雜得多與HTTPS)
  5. 瀏覽器發送通過TCP連接
  6. 瀏覽器接收HTTP響應的HTTP請求,並且可以關閉TCP連接,或再使用它爲另一請求
  7. 瀏覽器檢查該響應是重定向或條件響應(3xx結果狀態碼),a uthorization請求(401),錯誤(4xx和5xx)等;這些都是正常的反應(2XX)
  8. 不同的處理,如果緩存,響應存儲在緩存中
  9. 瀏覽器解碼響應(例如,如果它的gzip壓縮)
  10. 瀏覽器確定如何處理響應(例如做它是一個HTML頁面,是它的圖像,它是一個聲音片段)
  11. 瀏覽器渲染響應,或提供了無法識別的類型

一個下載對話框再次,每一個點都充滿了無數頁的討論?;爲了清楚起見,僅以總結爲目的。此外,還有許多其他事情與此並行(處理輸入地址,預測性預取,向瀏覽器歷史記錄添加頁面,向用戶顯示進度,通知插件和擴展,在下載時渲染頁面,流水線,連接跟蹤保持活躍,cookie管理,檢查惡意內容等) - 並且整個操作在HTTPS(證書和密碼以及pinning,噢,我的!)方面會變得更加複雜。

+2

https://medium.com/@maneesha.wijesinghe1/what-happens-when-you-type-an-url-in-the-browser-and-press-enter-bb0aa2449c1a – Kaushal28 2017-10-24 06:15:31

+0

@ Kaushal28有些類似,因爲它是完全一樣的話題,是的。我認爲,也許是受到這篇文章的啓發,但不是抄襲。 – Piskvor 2018-02-19 19:41:30

+0

編輯以消除這種明顯的誤解:「當您按下Enter鍵時發生這種情況,簡單,不? – Piskvor 2018-02-20 11:45:33

相關問題