題 當我在瀏覽器中輸入URL到頁面加載時,從一步一步到底發生了什麼? [關閉]


我最近在面試時被問過這個問題,特別是當我輸入facebook.com時。自從我申請編程職位以來,我不太確定受訪者正在尋找什麼,但是如何才能在高層次回答這個問題呢?


2
2018-04-03 23:13


起源


什麼工作?他是在尋找幕後工作(IT /開發工作)還是他可能想要這個過程的流程工作(鍵入Facebook.com,點擊GO或點擊鍵盤輸入,等待頁面加載,輸入用戶名.. 。 - Austin T French
這是一個編程位置,但我認為他正在尋找幕後......負載平衡器等,但高水平。 - KingKongFrog
你至少參考過DNS嗎? - Lorenzo Von Matterhorn
不......那就是我在這裡的原因。 :) - KingKongFrog
有 很多 在許多層面上發生的事情......這取決於你想要得到的詳細程度...... - Keltari


答案:


來自瀏覽器的HTTP請求的高級概述:

  1. 您在地址欄中輸入“facebook.com”。
  2. 瀏覽器將其解析為數字IP地址(這可以由操作系統緩存或需要跳轉到DNS服務器)。
  3. 瀏覽器發出“HTTP / GET”請求。它傳遞一個HttpRequest,其中包含有關瀏覽器的元數據,用戶首選項(如首選語言)以及該域的任何存儲的cookie。
  4. Facebook服務器收到請求,他們的代碼開始製作響應。
    • Facebook將使用包括cookie在內的傳遞信息來確定用戶是誰以及要發回的信息
  5. 從Facebook返回HTTP響應,包括狀態行(200 OK等)。包含內容類型等的標頭和HTML正文。
  6. 瀏覽器接收響應並開始解析它以進行顯示。
    • HTML正文將包含CSS,JS和圖像的鏈接。所有這些都將觸發回服務器的額外調用以檢索這些位
  7. 瀏覽器佈局引擎將開始組裝最終頁面以供顯示。
    • CSS信息可能會改變頁面的佈局和外觀
    • JS和DHTML可能會改變頁面的佈局
  8. 最終頁面被組裝並呈現給最終用戶。

維基百科 超文本協議 article是HTTP請求生命週期的良好起點。


4
2018-04-04 00:18





由於您沒有提及這是特定於編程,網絡還是特定於操作系統,因此我選擇假設它是在網絡級別上。

當您鍵入要查看的站點的地址並按Enter鍵時,您的計算機/瀏覽器將首先檢查域IP地址是否在瀏覽器級別或操作系統級別緩存。如果沒有,它將嘗試通過聯繫DNS服務器來解析該站點域名的IP地址。您的操作系統可以通過DHCP手動或自動配置,並配置一個或多個可以聯繫的DNS服務器的IP地址。

在某個時間點,被查詢的DNS服務器將使用與您輸入的域名關聯的服務器/設備的IP地址進行回复。現在可以構建TCP / IP數據包,並通過網絡將其發送到您輸入的域,以開始通信和來回傳輸數據,為您提供所要求的內容。


1
2018-04-03 23:26





就像幾乎所有的面試問題一樣,面試官並沒有尋找具體的答案,而是希望看到你對這個過程的理解程度,並讓你完成他們的思考過程。最有可能的是,他們正在尋找您是否可以識別各種組件(瀏覽器,ISP,HTTP,TCP,DNS,內核,Web服務器)並解釋他們如何進行交互。


1
2018-04-04 01:13





我會試一試,雖然它可以(顯然)在各個站點之間,瀏覽器到瀏覽器以及他想要的內容或他來自的方向上有很大差異。一個招聘經理可能想要一個非常詳細的整個過程的方法和你對Facebook的熟悉(如果你可能會開始工作說Facebook插件),我不太熟悉。我將遺漏這些過程的東西。

  1. 在地址欄中輸入“Facebook.com”
  2. DNS應該解決
  3. 隨著Facebook加載,它將根據用戶之前是否曾在那裡檢測或創建cookie
  4. 如果有cookie,Facebook可以登錄用戶,如果沒有,則顯示登錄頁面和/或註冊頁面。
  5. 使用用戶登錄,不區分大小寫的電子郵件地址和屏蔽的secureString密碼框
  6. 選擇登錄按鈕,加密安全密碼,散列並與所顯示用戶名的正確存儲密碼進行比較,並確認兩者都匹配記錄。
  7. 如果成功,請顯示Facebook'WALL',否則顯示失敗的消息並允許重試。 JS應該存儲最多X次嘗試的無效嘗試,以及在強力情況下寫入用戶記錄以進行無效嘗試。

0
2018-04-03 23:35