有人能告訴我從瀏覽器中輸入URL的時間到在瀏覽器上看到頁面的時間,幕後發生了什麼?這個過程的詳細說明會有很大的幫助。當你在瀏覽器中輸入URL時會發生什麼
回答
查找HTTP的規範。或者要開始,請嘗試http://www.jmarshall.com/easy/http/
首先計算機查找目標主機。如果它存在於本地DNS緩存中,它將使用該信息。否則,將執行DNS查詢,直到找到IP地址。
然後,您的瀏覽器打開一個到目標主機的TCP連接,並根據HTTP 1.1發送請求(或者可能使用HTTP 1.0,但普通瀏覽器不會再這樣做)。
服務器查找所需的資源(如果存在的話),並且使用HTTP協議進行響應,將數據發送到所述客戶端(=你的瀏覽器)
然後,瀏覽器使用HTML解析器來重新創建文件結構,該結構稍後在屏幕上呈現給您。如果它發現對外部資源(如圖片,css文件,JavaScript文件)的引用,則這些文件以與HTML文檔本身相同的方式傳遞。假設最簡單的HTTP請求(沒有HTTPS,沒有HTTP2,沒有額外的),最簡單的DNS,沒有代理,單棧IPv4,只有一個HTTP請求(
注意:這是一個非常粗糙和過於簡化草圖,另一端是一個簡單的HTTP服務器,並且在任何步驟中都沒有問題。對於大多數當代意圖和目的而言,這是一種不切實際的情景;所有這些在實際使用中都要複雜得多,而且自從寫成這個技術堆棧以來,這個技術堆棧就變得更加複雜了。考慮到這一點,以下時間線仍然有些有效:
- 瀏覽器檢查緩存;如果請求的對象是在緩存中,是新鮮的,跳到#9
- 瀏覽器請求OS服務器的IP地址
- OS使得DNS查詢和回覆的IP地址,瀏覽器
- 瀏覽器打開一個TCP連接到服務器(這個步驟是複雜得多與HTTPS)
- 瀏覽器發送通過TCP連接
- 瀏覽器接收HTTP響應的HTTP請求,並且可以關閉TCP連接,或再使用它爲另一請求
- 瀏覽器檢查該響應是重定向或條件響應(3xx結果狀態碼),a uthorization請求(401),錯誤(4xx和5xx)等;這些都是正常的反應(2XX)
- 不同的處理,如果緩存,響應存儲在緩存中
- 瀏覽器解碼響應(例如,如果它的gzip壓縮)
- 瀏覽器確定如何處理響應(例如做它是一個HTML頁面,是它的圖像,它是一個聲音片段)
- 瀏覽器渲染響應,或提供了無法識別的類型
一個下載對話框再次,每一個點都充滿了無數頁的討論?;爲了清楚起見,僅以總結爲目的。此外,還有許多其他事情與此並行(處理輸入地址,預測性預取,向瀏覽器歷史記錄添加頁面,向用戶顯示進度,通知插件和擴展,在下載時渲染頁面,流水線,連接跟蹤保持活躍,cookie管理,檢查惡意內容等) - 並且整個操作在HTTPS(證書和密碼以及pinning,噢,我的!)方面會變得更加複雜。
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
@ Kaushal28有些類似,因爲它是完全一樣的話題,是的。我認爲,也許是受到這篇文章的啓發,但不是抄襲。 – Piskvor 2018-02-19 19:41:30
編輯以消除這種明顯的誤解:「當您按下Enter鍵時發生這種情況,簡單,不? – Piskvor 2018-02-20 11:45:33
- 1. 當我點擊瀏覽器時,ViewState會發生什麼?
- 2. 當我按瀏覽器BACK按鈕時會發生什麼?
- 3. 當瀏覽器關閉時,applet會發生什麼?
- 4. 當你不加入你的主題時會發生什麼?
- 5. 當你在unix shell上鍵入時會發生什麼
- 6. 在瀏覽器網址中輸入內容時發生了什麼?
- 7. 鍵入google.com後按下輸入到網絡瀏覽器後會發生什麼
- 8. 當用戶點擊瀏覽器中的後退按鈕時會發生什麼?
- 9. 當你停止VS調試器時會發生什麼?
- 10. 在Python中,當你在函數內部導入時會發生什麼?
- 11. 當您指示瀏覽器轉到網頁時會發生什麼?
- 12. 開始PHP腳本,當我點擊瀏覽器時會發生什麼?
- 13. Erlang:當你f()中的一個Pid時會發生什麼?
- 14. 當我輸入ctrl + alt + t時會發生什麼?
- 15. 當你同時觸摸兩個按鈕時會發生什麼
- 16. 當您不在Flash中嵌入字體時會發生什麼?
- 17. fgets在輸入中遇到EOF時會發生什麼?
- 18. 如果瀏覽器不支持gzip,會發生什麼情況?
- 19. 當我們瀏覽ASPX頁面時發生了什麼?
- 20. 當你rm文件時會發生什麼?
- 21. 當你運行一個程序時會發生什麼?
- 22. 當你調用UItableview的重裝兩次時會發生什麼
- 23. 當你從C啓動A到B時會發生什麼?
- 24. 當你邏輯不是浮動時會發生什麼?
- 25. 當你JAR而不是WAR時,會發生什麼情況
- 26. 當你增加數組時,會發生什麼。 {A [in.nextInt()] ++;}
- 27. 當你使用unbind()失敗時會發生什麼?
- 28. 當瀏覽器中的頁面加載被取消時,服務器中會發生什麼?
- 29. 你測試什麼瀏覽器設置?
- 30. 當用戶在Web瀏覽器中按下停止按鈕時會發生什麼?
儘管這可能與編程有關(最終) - 這可以回答的詳細程度將(並且)填充了卷。請重申爲編程查詢。 – KevinDTimm 2010-01-19 09:48:19
研究維基百科上的DNS以開始使用。 – 2010-01-19 09:53:09
獲取O'Reilly的* DNS和綁定*書。它只有624頁。 – 2010-01-19 09:57:11