localhost 與 127-0-0-1 在本地開發中到底有什麼區別?

在進行前端開發時,我們經常使用localhost,只需運行npm run就能在瀏覽器中打開網頁,地址欄顯示類似於http://localhost:xxx/index.html,但是很多人並不瞭解更深層次的原理,不知道 localhost 與 127.0.0.1 到底有什麼區別。

瞭解 localhost 是什麼?

localhost是一個域名,從本質上來說和用於互聯網訪問的域名沒有太大不同,只是更容易記憶。

localhost的範圍僅限於本地機器,其名稱清楚地表明:“local” 指的是在本地範圍內的東西。

我們都可以在各自的機器上使用localhost,而互不干擾,訪問各自的頁面內容。

從域名到程序

爲了真正理解localhost,我們需要討論用戶通過域名訪問程序的方式,以谷歌爲例。

  1. 在瀏覽器中輸入google.com,首先會查詢 DNS 獲取google.com的 IP 地址。

    爲什麼需要 IP 地址?類比一下,如果有人向你的公司發送一個包裹,交付單上會包括公司的地址、名稱和收件人等詳細信息。交付的過程依賴於地址進行路由,最終到達收件人。類似地,在網絡中,域名就像公司名稱,而 IP 地址就像物理地址。在網絡世界中,IP 地址對於定位相應的程序至關重要。

    DNS 就像公司目錄,列出了每個域名對應的 IP 地址。一些域名可能沒有註冊,導致它們的 IP 地址無法找到,而其他域名可能有多個 IP 地址,DNS 會根據某些規則自動返回其中一個。購買域名後,域名服務提供商通常提供 DNS 解析服務,將域名及其對應的 IP 地址在 DNS 中註冊。

  2. 有了 IP 地址,瀏覽器向這個地址發送請求,操作系統將其打包成 IP 數據包,然後通過網絡傳輸。基於提供的 IP 地址以及通過各種路由器提供的網絡路由協議,最終到達綁定到該 IP 的計算機。

  3. 一臺計算機上可能部署了多個網絡應用程序。哪個應用程序應該接收請求?這就是端口發揮作用的地方。每個網絡應用程序可以綁定一個或多個端口,防止系統重疊。在請求中指定端口,可以將其路由到正確的網絡應用程序。

但是當我們訪問谷歌時,並沒有指定端口。這是因爲當沒有指定時,使用默認端口,HTTP 爲 80,HTTPS 爲 443。在啓動網絡程序時,必須綁定端口,儘管有些框架會自動選擇計算機上未使用的端口。

localhost 與 127.0.0.1 的區別是什麼?

有了上述的基礎知識,我們可以很容易理解這個問題。

localhost是一個域名,如前所述。

那麼127.0.0.1呢?它是一個 IP 地址,是當前機器的本地 IP 地址,只能在該機器上使用。你的計算機可以在沒有連接到互聯網的情況下使用這個 IP 地址,這對於開發和測試網絡程序非常方便。我們調試的程序綁定到這個 IP 地址。

值得注意的是,我們通常看到的 IP 地址格式爲 X.X.X.X,由點分隔爲四個段。實際上,它是一個 32 位的二進制數,由四個 8 位的段組成,然後轉換爲十進制數進行顯示。

那麼localhost是如何解析爲127.0.0.1的呢?是通過 DNS 嗎?並不是。每臺計算機都可以在沒有 DNS 解析的情況下使用localhost127.0.0.1

這個解析是由每臺計算機獨立處理的。每臺計算機上都有一個主機文件,其中包含一些硬編碼的 DNS 解析規則,包括將localhost解析爲127.0.0.1的規則,這是一種約定。

如果你不喜歡使用localhost,那也沒關係。你可以將它命名爲任何你喜歡的名稱,比如myhost,並將其解析爲127.0.0.1

你甚至可以使用google.com,但那隻能給你自己使用,不會影響其他人。

域名層次結構

localhost並不完全類似於我們通常使用的域名,比如www.juejin.cngoogle.comcsdn.netwwwcncomnet是什麼意思?爲什麼localhost不需要它們?

域名是分層次的,分爲頂級域(TLD)、二級域(SLD)和三級域(3LD):

通過這個定義,我們可以將localhost視爲一個頂級域,儘管是一個保留的頂級域,僅用於訪問當前計算機。

多個網站共享一個 IP 和端口

正如前面提到的,不同的網絡程序不能使用相同的端口,但有方法可以規避這個問題。

在個人博客流行的時候,許多人喜歡購買虛擬主機並部署開源博客平臺來表達自己的想法。爲了賺錢,虛擬主機提供商會在一臺計算機上分配許多虛擬主機,允許每個人都可以使用默認的端口 80 訪問他們的域名,而不會有任何問題。這是怎麼可能的呢?

如果你對 Nginx、Apache 或 IIS 等 web 服務器有經驗,可能會熟悉主機頭的概念。主機頭本質上是一個域名。通過設置主機頭,我們的程序可以共享一個網絡端口。

在啓動時,Nginx 和其他 web 服務器將端口 80 獨佔爲自己使用。

當網站請求到達 Nginx 的端口 80 時,它根據請求中的域名(主機頭中的域名)識別出相應的網絡程序,然後將請求轉發給該網絡程序。

私有 IP 地址

除了127.0.0.1之外,還有許多私有 IP 地址,比如常見的192.168.x.x。這些私有 IP 地址主要保留在局域網(LAN)中使用,因爲爲每臺計算機分配唯一的 IP 地址是不可行的。只要在 LAN 中沒有衝突,這些地址就可以自由使用。你的公司可以使用192.168.1.1,我的公司也可以使用192.168.1.1,但如果你想訪問我的公司,你需要通過公共 IP 地址。

常用的 IPv4 私有 IP 地址範圍分爲三個類:

這些私有 IP 地址僅用於內部網絡,並且不能在公共互聯網上使用。

除了上述三個私有 IPv4 地址範圍外,還有一些保留的 IPv4 地址範圍:

這些地址範圍也不能在公共互聯網上使用。

還有一些較不常見的專用 IPv4 地址範圍。有關 IP 地址範圍的完整定義可以在 IANA 網站 [1] 上找到。

IPv6

你可能也聽說過 IPv6,由於 IPv4 地址空間不足,IPv6 被引入,理論上可以爲地球上的每一粒沙子分配一個 IP 地址。儘管多年來一直在討論,但 IPv4 仍然更廣泛地使用。

IPv6 地址的格式爲XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX。它有 128 位長,由冒號分隔成 8 段,其中每個 X 代表一個十六進制數(從 0 到 F)。IPv6 的地址空間比 IPv4 大得多。例如,2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b就是一個有效的 IPv6 地址。

翻譯自:https://readmedium.com/whats-the-difference-between-localhost-and-127-0-0-1-4102ba05d494

原作者:Oliver Foster

參考資料

[1]

IANA 網站: www.iana.org/assignments/ipv4-address-space

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/A863ufSitmIcfv9gtim1yA