」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 當您在瀏覽器中輸入 URL 時會發生什麼?

當您在瀏覽器中輸入 URL 時會發生什麼?

發佈於2024-11-05
瀏覽:142

您是否想知道當您在瀏覽器中輸入 URL 並按 Enter 鍵時幕後會發生什麼?這個過程比您想像的更加複雜,涉及多個步驟,這些步驟無縫地協同工作以提供您請求的網頁。在本文中,我們將探討從輸入 URL 到查看完全載入的網頁的整個過程,闡明使這一切成為可能的技術和協定。

What Happens When You Type a URL Into a Browser?

第 1 步:輸入 URL 並將其轉換為 IP 位址

當您在瀏覽器中輸入 URL(例如 www.example.com)時,旅程就開始了。瀏覽器的首要任務是將這個人類可讀的 URL 轉換為 IP 位址,也就是託管網站的伺服器的數位位址。這種翻譯至關重要,因為當我們使用網域名稱時,電腦使用數位位址進行通信,例如 192.0.2.1.

為了查找 IP 位址,瀏覽器會檢查多個快取以加快流程:

  • 瀏覽器快取:儲存先前的IP位址以避免重複查找。
  • 作業系統 (OS) 快取:如果在瀏覽器快取中找不到,則會檢查作業系統快取。
  • 路由器或本地快取:瀏覽器可能會檢查路由器的快取或本機網路快取。
  • ISP 快取:最後,您的 Internet 服務供應商 (ISP) 保留 IP 位址快取。

如果這些快取均不包含 IP 位址,瀏覽器會執行 DNS(網域名稱系統)查找。

步驟 2:DNS 尋找並解析 IP 位址

當在任何快取中都找不到 IP 位址時,瀏覽器會啟動 DNS 查找。將 DNS 視為網際網路的電話簿 — 它透過幾個步驟將網域名稱轉換為 IP 位址:

  1. 遞歸 DNS 查找:DNS 解析器對各個 DNS 伺服器進行遞迴查詢,直到找到請求的 IP 位址。
  2. 根 DNS 伺服器:解析器首先查詢根 DNS 伺服器,根 DNS 伺服器將其定向到 TLD(頂級網域)DNS 伺服器(例如 .com 或 .org)。
  3. 權威 DNS 伺服器:TLD 伺服器隨後指向該網域的權威 DNS 伺服器(例如 example.com),該伺服器提供正確的 IP 位址。

有了這些訊息,您的瀏覽器就可以繼續與網頁伺服器建立連線。

第3步:建立TCP連線與HTTPS握手

一旦您的瀏覽器獲得了 IP 位址,它就會發送 HTTP(或 HTTPS)請求以發起與 Web 伺服器的通訊。然而,在交換任何資料之前,必須透過稱為 TCP 3 次握手:

的過程建立 TCP(傳輸控制協定)連接
  1. SYN:客戶端發送SYN(同步)訊息請求連線。
  2. SYN-ACK:伺服器以 SYN-ACK(同步確認)訊息回應。
  3. ACK:最後,用戶端傳回ACK(確認)訊息以建立連線。

如果您透過 HTTPS 造訪網站,則會發生一個附加步驟 - SSL/TLS 握手 - 確保瀏覽器和伺服器之間交換的資料經過加密:

  1. 伺服器將其公鑰傳送到您的瀏覽器。
  2. 您的瀏覽器使用此公鑰加密會話金鑰並將其發送回。
  3. 伺服器使用其私鑰解密此會話金鑰。
  4. 雙方使用此會話金鑰進行安全通訊。

第4步:發送HTTP請求

建立安全連線後,您的瀏覽器會傳送 HTTP 請求以存取伺服器上的特定資源。此請求包含詳細信息,例如您的瀏覽器類型以及您嘗試訪問的頁面。 HTTP 請求可能如下所示:


GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
Accept: text/html


伺服器處理該請求並準備發回所請求的資源。

第五步:伺服器處理請求並發送回應

處理您的請求後,伺服器會產生一個 HTTP 回應,其中包含渲染頁面所需的 HTML、CSS、JavaScript 和圖像等資源。理想情況下,此回應的狀態代碼為 200 OK,表示一切順利。

以下是該回應的範例:


HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 3485




Example Page


Welcome to Example.com!






第 6 步:渲染頁

一旦您的瀏覽器收到此回應,它就會開始透過解析 HTML 和 CSS 檔案來渲染頁面,同時執行這些檔案中包含的任何 JavaScript 程式碼。此過程涉及建立文件物件模型 (DOM),它表示網頁上的元素的結構。

渲染引擎負責根據此 DOM 結構和套用於其的 CSS 樣式在螢幕上繪製像素。

結論

了解當您在瀏覽器中輸入 URL 時會發生什麼,揭示了現代網頁技術是多麼複雜而高效。從將網域轉換為 IP 位址,到建立安全連線和無縫呈現頁面,每一步對於快速且安全地交付內容都起著至關重要的作用。

下次您在線上瀏覽時,請花點時間欣賞所有這些幕後流程的協同工作,以便您可以在您喜愛的網站上享受流暢的導航!

延伸閱讀

對於有興趣加深網路技術如何運作或尋求更多技術見解的人:

  • DNS 的工作原理
  • 瞭解 TCP/IP
  • HTTPS 連線

透過探索這些資源,您將更深入地了解我們的數位世界如何運作!

版本聲明 本文轉載於:https://dev.to/vyan/what-happens-when-you-type-a-url-into-a-browser-2mh2?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 人臉檢測失敗原因及解決方案:Error -215
    人臉檢測失敗原因及解決方案:Error -215
    錯誤處理:解決“ error:( - 215)!empty()in Function openCv in Function MultSiscale中的“檢測”中的錯誤:在功能檢測中。”當Face Cascade分類器(即面部檢測至關重要的組件)未正確加載時,通常會出現此錯誤。 要解決此問題,必...
    程式設計 發佈於2025-05-24
  • Java為何無法創建泛型數組?
    Java為何無法創建泛型數組?
    通用陣列創建錯誤 arrayList [2]; JAVA報告了“通用數組創建”錯誤。為什麼不允許這樣做? 答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<my...
    程式設計 發佈於2025-05-24
  • 如何從Google API中檢索最新的jQuery庫?
    如何從Google API中檢索最新的jQuery庫?
    從Google APIS 問題中提供的jQuery URL是版本1.2.6。對於檢索最新版本,以前有一種使用特定版本編號的替代方法,它是使用以下語法:獲取最新版本:未壓縮)While these legacy URLs still remain in use, it is recommended ...
    程式設計 發佈於2025-05-24
  • 如何高效地在一個事務中插入數據到多個MySQL表?
    如何高效地在一個事務中插入數據到多個MySQL表?
    mySQL插入到多個表中,該數據可能會產生意外的結果。雖然似乎有多個查詢可以解決問題,但將從用戶表的自動信息ID與配置文件表的手動用戶ID相關聯提出了挑戰。 使用Transactions和last_insert_id() 插入用戶(用戶名,密碼)值('test','tes...
    程式設計 發佈於2025-05-24
  • 如何在Chrome中居中選擇框文本?
    如何在Chrome中居中選擇框文本?
    選擇框的文本對齊:局部chrome-inly-ly-ly-lyly solument 您可能希望將文本中心集中在選擇框中,以獲取優化的原因或提高可訪問性。但是,在CSS中的選擇元素中手動添加一個文本 - 對屬性可能無法正常工作。 初始嘗試 state)</option> < o...
    程式設計 發佈於2025-05-24
  • C++成員函數指針正確傳遞方法
    C++成員函數指針正確傳遞方法
    如何將成員函數置於c [&& && && && && && && && && && &&&&&&&&&&&&&&&&&&&&&&&華儀的函數時,在接受成員函數指針的函數時,要在函數上既要提供指針又可以提供指針和指針到函數的函數。需要具有一定簽名的功能指針。要通過成員函數,您需要同時提供對象指針(此...
    程式設計 發佈於2025-05-24
  • Java中假喚醒真的會發生嗎?
    Java中假喚醒真的會發生嗎?
    在Java中的浪費喚醒:真實性或神話? 在Java同步中偽裝喚醒的概念已經是討論的主題。儘管存在這種行為的潛力,但問題仍然存在:它們實際上是在實踐中發生的嗎? Linux的喚醒機制根據Wikipedia關於偽造喚醒的文章,linux實現了pthread_cond_wait()功能的Linux實現,...
    程式設計 發佈於2025-05-24
  • 如何解決由於Android的內容安全策略而拒絕加載腳本... \”錯誤?
    如何解決由於Android的內容安全策略而拒絕加載腳本... \”錯誤?
    Unveiling the Mystery: Content Security Policy Directive ErrorsEncountering the enigmatic error "Refused to load the script..." when deployi...
    程式設計 發佈於2025-05-24
  • 為什麼不使用CSS`content'屬性顯示圖像?
    為什麼不使用CSS`content'屬性顯示圖像?
    在Firefox extemers屬性為某些圖像很大,&& && && &&華倍華倍[華氏華倍華氏度]很少見,卻是某些瀏覽屬性很少,尤其是特定於Firefox的某些瀏覽器未能在使用內容屬性引用時未能顯示圖像的情況。這可以在提供的CSS類中看到:。 googlepic { 內容:url(&...
    程式設計 發佈於2025-05-24
  • 如何有效地轉換PHP中的時區?
    如何有效地轉換PHP中的時區?
    在PHP 利用dateTime對象和functions DateTime對象及其相應的功能別名為時區轉換提供方便的方法。例如: //定義用戶的時區 date_default_timezone_set('歐洲/倫敦'); //創建DateTime對象 $ dateTime = ne...
    程式設計 發佈於2025-05-24
  • 使用jQuery如何有效修改":after"偽元素的CSS屬性?
    使用jQuery如何有效修改":after"偽元素的CSS屬性?
    在jquery中了解偽元素的限制:訪問“ selector 嘗試修改“:”選擇器的CSS屬性時,您可能會遇到困難。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    程式設計 發佈於2025-05-24
  • 為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    為什麼不````''{margin:0; }`始終刪除CSS中的最高邊距?
    在CSS 問題:不正確的代碼: 全球範圍將所有餘量重置為零,如提供的代碼所建議的,可能會導致意外的副作用。解決特定的保證金問題是更建議的。 例如,在提供的示例中,將以下代碼添加到CSS中,將解決餘量問題: body H1 { 保證金頂:-40px; } 此方法更精確,避免了由全局保證金重置...
    程式設計 發佈於2025-05-24
  • 如何在無序集合中為元組實現通用哈希功能?
    如何在無序集合中為元組實現通用哈希功能?
    在未訂購的集合中的元素要糾正此問題,一種方法是手動為特定元組類型定義哈希函數,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    程式設計 發佈於2025-05-24
  • 如何在Java的全屏獨家模式下處理用戶輸入?
    如何在Java的全屏獨家模式下處理用戶輸入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    程式設計 發佈於2025-05-24
  • JavaScript計算兩個日期之間天數的方法
    JavaScript計算兩個日期之間天數的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    程式設計 發佈於2025-05-24

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3