當前端開發人員在本地調試時,他們經常與 localhost 互動,只需運行npm run命令就可以在瀏覽器中打開他們的網頁,地址欄顯示類似于 http://localhost:xxx/index.html的內容。
許多人在使用它時可能沒有思考兩者之間的區別。
考慮到我過去與開發人員合作時他們也缺乏對這兩者區別的清晰理解,我覺得有必要在這個話題上傳播一些知識。
localhost 是一個域名,從根本上說,與用于互聯網訪問的域名沒有什么不同,只是它更容易記憶。
localhost 的范圍僅限于本地機器——它的名字說明了一切:“local”指的是本地的東西。
John Smith 和 Jane Doe 都可以在各自的機器上使用 localhost,而不會相互干擾,訪問他們各自的頁面內容。
要真正理解 localhost,我們需要討論用戶是如何通過域名訪問程序的,以谷歌為例。
在瀏覽器中輸入google.com時,它首先查詢DNS以獲取google.com的IP地址。
為什么需要IP地址?打個比方,如果有人向你的公司發送包裹,快遞單上會包括公司的地址、名稱和收件人等詳細信息。快遞過程依賴于地址來進行路由,最終到達收件人。同樣,在網絡中,域名就像公司名稱,IP地址就像物理地址。在網絡世界中,IP地址對于定位相應的程序至關重要。
DNS就像一個公司目錄,列出每個域名對應的IP地址。有些域名可能沒有注冊,使得它們的IP地址無法找到,而其他域名可能有多個IP地址,DNS會根據特定規則自動返回其中一個。購買域名后,域名服務提供商通常會提供DNS解析服務,將域名及其對應的IP地址注冊在DNS中。
IP地址從哪里來?每臺聯網的計算機都有一個IP地址,但個人計算機的IP通常不適合公開訪問,類似于對內部人員清晰但對外部人士不明的內部公司位置。對于谷歌這樣的外部服務,需要一個公共IP地址,通常由互聯網服務提供商提供。例如,如果你的公司使用中國聯通進行網絡接入,你可以讓他們為你的公司網關服務器分配一個公共IP地址。網關服務器就像一個交換機,處理所有內部網絡通信,并設置轉發規則來將傳入請求路由到適當的服務器。
2.有了IP地址,瀏覽器就會向這個地址發送請求,操作系統會將請求打包成IP數據包,然后通過網絡傳輸。網絡的路由協議根據提供的IP地址和通過各種路由器,最終到達綁定該IP的計算機。
3.一臺計算機上可能部署了多個網絡應用程序。哪一個應該接收請求?這時候端口就起作用了。每個網絡應用程序都可以綁定一個或多個端口,系統會防止端口重疊。在請求中指定一個端口可以將請求路由到正確的網絡應用程序。
但當我們訪問谷歌時,我們并不指定端口。這是因為當未指定端口時,默認使用HTTP的80端口和HTTPS的443端口。啟動網絡程序時綁定端口是必須的,盡管有些框架會自動選擇計算機上未使用的端口。
在了解了基礎知識后,我們可以更容易地理解這個問題。
localhost 是一個域名,如前所述。
那么127.0.0.1呢?它是一個IP地址,即當前機器的本地IP地址,只能在該機器上使用。你的計算機可以在沒有連接到互聯網的情況下使用這個IP地址,這對于開發和測試網絡程序非常方便。我們調試的程序綁定到這個IP地址上。
值得注意的是,我們常見的IP地址格式為X.X.X.X,由點分隔為四段。實際上,它是一個32位的二進制數,分為四個8位的段,然后轉換為十進制數顯示。
那么localhost是如何解析到127.0.0.1的呢?它需要通過DNS嗎?不需要。每臺計算機都可以在沒有DNS解析的情況下使用localhost和127.0.0.1。
這個解析是由每臺計算機獨立處理的。每臺計算機上都有一個hosts文件,里面包含一些硬編碼的DNS解析規則,包括將localhost解析到127.0.0.1的規則,這是一個約定。
如果你不想使用localhost,也沒問題。你可以將其命名為任何名稱,如wodehost,并將其解析到127.0.0.1。
你甚至可以使用google.com,但這只會對你自己有效,不會影響到其他任何人。
localhost與我們通常使用的域名,如 www.juejin.cn、google.com或csdn.net不太一樣。www、cn、com和net代表什么?為什么localhost不需要它們?
域名是分層的,分為頂級域名(TLD)、二級域名(SLD)和三級域名(3LD)等。
根據這個定義,我們可以將localhost視為一個頂級域名,盡管是一個保留的,僅用于訪問當前計算機的頂級域名。
如前所述,不同的網絡程序不能使用相同的端口,但有方法可以繞過這個限制。
在個人博客流行的時候,許多人喜歡購買虛擬主機并部署一個開源博客平臺來表達自己。為了賺錢,虛擬主機提供商會在一臺計算機上分配許多虛擬主機,讓每個人都可以使用默認的80端口訪問他們的域名而不會有任何問題。這是怎么做到的呢?
如果你有使用Nginx、Apache或IIS等網絡服務器的經驗,你可能對主機頭的概念有所了解。主機頭實際上就是域名。通過設置主機頭,我們的程序可以共享一個網絡端口。
在Nginx等網絡服務器中部署網站時,我們配置它以在主機頭中包含域名。
啟動時,Nginx和其他網絡服務器會將80端口占為己用。
當網站請求到達Nginx的80端口時,它會根據請求中的域名識別出配置了相應主機頭的網絡程序。
然后,Nginx會將請求轉發給該網絡程序,如果需要,啟動它。
除了127.0.0.1,還有很多私有IP地址,例如常見的192.168.x.x。這些私有IP地址大多保留用于局域網(LAN)內使用,因為為每臺計算機分配唯一的IP地址是不現實的。只要在局域網內部沒有沖突,這些地址可以自由使用。你的公司可以使用192.168.1.1,我的公司也可以使用192.168.1.1,但如果你想訪問我的公司,你需要通過公共IP地址。
常用的IPv4私有IP地址范圍分為三個類別:
這些私有IP地址僅供內部網絡使用,不能用于公共互聯網。
除了上述三種私有IPv4地址范圍,還有一些保留的IPv4地址范圍:
127.0.0.0到127.255.255.255地址范圍用于回環測試,包括問題中提到的127.0.0.1地址。你還可以分配給自己一個類似127.0.0.2的IP地址,它的功能與127.0.0.1相同。169.254.0.0到169.254.255.255地址范圍用于局域網內部。這種情況較少見,如果你的計算機無法連接到局域網,可能會看到這個IP地址,它是臨時分配的局域網地址。 這些地址范圍也不能用于公共互聯網。
還有一些不太常見的專用IPv4地址范圍。IP地址范圍的完整定義可以在這里找到:www.iana.org/assignments……
你可能也聽說過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地址。
本文鏈接:http://www.tebozhan.com/showinfo-26-91025-0.htmllocalhost 和 127.0.0.1 有什么區別?
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 一道字節面試題,把群友整不會了,關于 useMemo 用法的另外一個延伸
下一篇: 了解結構化數據與非結構化數據的差異