當(dāng)前端開發(fā)人員在本地調(diào)試時(shí),他們經(jīng)常與 localhost 互動(dòng),只需運(yùn)行npm run命令就可以在瀏覽器中打開他們的網(wǎng)頁,地址欄顯示類似于 http://localhost:xxx/index.html的內(nèi)容。
許多人在使用它時(shí)可能沒有思考兩者之間的區(qū)別。
考慮到我過去與開發(fā)人員合作時(shí)他們也缺乏對這兩者區(qū)別的清晰理解,我覺得有必要在這個(gè)話題上傳播一些知識(shí)。

localhost 是一個(gè)域名,從根本上說,與用于互聯(lián)網(wǎng)訪問的域名沒有什么不同,只是它更容易記憶。
localhost 的范圍僅限于本地機(jī)器——它的名字說明了一切:“l(fā)ocal”指的是本地的東西。
John Smith 和 Jane Doe 都可以在各自的機(jī)器上使用 localhost,而不會(huì)相互干擾,訪問他們各自的頁面內(nèi)容。
要真正理解 localhost,我們需要討論用戶是如何通過域名訪問程序的,以谷歌為例。
在瀏覽器中輸入google.com時(shí),它首先查詢DNS以獲取google.com的IP地址。
為什么需要IP地址?打個(gè)比方,如果有人向你的公司發(fā)送包裹,快遞單上會(huì)包括公司的地址、名稱和收件人等詳細(xì)信息。快遞過程依賴于地址來進(jìn)行路由,最終到達(dá)收件人。同樣,在網(wǎng)絡(luò)中,域名就像公司名稱,IP地址就像物理地址。在網(wǎng)絡(luò)世界中,IP地址對于定位相應(yīng)的程序至關(guān)重要。
DNS就像一個(gè)公司目錄,列出每個(gè)域名對應(yīng)的IP地址。有些域名可能沒有注冊,使得它們的IP地址無法找到,而其他域名可能有多個(gè)IP地址,DNS會(huì)根據(jù)特定規(guī)則自動(dòng)返回其中一個(gè)。購買域名后,域名服務(wù)提供商通常會(huì)提供DNS解析服務(wù),將域名及其對應(yīng)的IP地址注冊在DNS中。
IP地址從哪里來?每臺(tái)聯(lián)網(wǎng)的計(jì)算機(jī)都有一個(gè)IP地址,但個(gè)人計(jì)算機(jī)的IP通常不適合公開訪問,類似于對內(nèi)部人員清晰但對外部人士不明的內(nèi)部公司位置。對于谷歌這樣的外部服務(wù),需要一個(gè)公共IP地址,通常由互聯(lián)網(wǎng)服務(wù)提供商提供。例如,如果你的公司使用中國聯(lián)通進(jìn)行網(wǎng)絡(luò)接入,你可以讓他們?yōu)槟愕墓揪W(wǎng)關(guān)服務(wù)器分配一個(gè)公共IP地址。網(wǎng)關(guān)服務(wù)器就像一個(gè)交換機(jī),處理所有內(nèi)部網(wǎng)絡(luò)通信,并設(shè)置轉(zhuǎn)發(fā)規(guī)則來將傳入請求路由到適當(dāng)?shù)姆?wù)器。
2.有了IP地址,瀏覽器就會(huì)向這個(gè)地址發(fā)送請求,操作系統(tǒng)會(huì)將請求打包成IP數(shù)據(jù)包,然后通過網(wǎng)絡(luò)傳輸。網(wǎng)絡(luò)的路由協(xié)議根據(jù)提供的IP地址和通過各種路由器,最終到達(dá)綁定該IP的計(jì)算機(jī)。
3.一臺(tái)計(jì)算機(jī)上可能部署了多個(gè)網(wǎng)絡(luò)應(yīng)用程序。哪一個(gè)應(yīng)該接收請求?這時(shí)候端口就起作用了。每個(gè)網(wǎng)絡(luò)應(yīng)用程序都可以綁定一個(gè)或多個(gè)端口,系統(tǒng)會(huì)防止端口重疊。在請求中指定一個(gè)端口可以將請求路由到正確的網(wǎng)絡(luò)應(yīng)用程序。
但當(dāng)我們訪問谷歌時(shí),我們并不指定端口。這是因?yàn)楫?dāng)未指定端口時(shí),默認(rèn)使用HTTP的80端口和HTTPS的443端口。啟動(dòng)網(wǎng)絡(luò)程序時(shí)綁定端口是必須的,盡管有些框架會(huì)自動(dòng)選擇計(jì)算機(jī)上未使用的端口。
在了解了基礎(chǔ)知識(shí)后,我們可以更容易地理解這個(gè)問題。
localhost 是一個(gè)域名,如前所述。
那么127.0.0.1呢?它是一個(gè)IP地址,即當(dāng)前機(jī)器的本地IP地址,只能在該機(jī)器上使用。你的計(jì)算機(jī)可以在沒有連接到互聯(lián)網(wǎng)的情況下使用這個(gè)IP地址,這對于開發(fā)和測試網(wǎng)絡(luò)程序非常方便。我們調(diào)試的程序綁定到這個(gè)IP地址上。
值得注意的是,我們常見的IP地址格式為X.X.X.X,由點(diǎn)分隔為四段。實(shí)際上,它是一個(gè)32位的二進(jìn)制數(shù),分為四個(gè)8位的段,然后轉(zhuǎn)換為十進(jìn)制數(shù)顯示。
那么localhost是如何解析到127.0.0.1的呢?它需要通過DNS嗎?不需要。每臺(tái)計(jì)算機(jī)都可以在沒有DNS解析的情況下使用localhost和127.0.0.1。
這個(gè)解析是由每臺(tái)計(jì)算機(jī)獨(dú)立處理的。每臺(tái)計(jì)算機(jī)上都有一個(gè)hosts文件,里面包含一些硬編碼的DNS解析規(guī)則,包括將localhost解析到127.0.0.1的規(guī)則,這是一個(gè)約定。
如果你不想使用localhost,也沒問題。你可以將其命名為任何名稱,如wodehost,并將其解析到127.0.0.1。
你甚至可以使用google.com,但這只會(huì)對你自己有效,不會(huì)影響到其他任何人。
localhost與我們通常使用的域名,如 www.juejin.cn、google.com或csdn.net不太一樣。www、cn、com和net代表什么?為什么localhost不需要它們?
域名是分層的,分為頂級域名(TLD)、二級域名(SLD)和三級域名(3LD)等。
根據(jù)這個(gè)定義,我們可以將localhost視為一個(gè)頂級域名,盡管是一個(gè)保留的,僅用于訪問當(dāng)前計(jì)算機(jī)的頂級域名。
如前所述,不同的網(wǎng)絡(luò)程序不能使用相同的端口,但有方法可以繞過這個(gè)限制。
在個(gè)人博客流行的時(shí)候,許多人喜歡購買虛擬主機(jī)并部署一個(gè)開源博客平臺(tái)來表達(dá)自己。為了賺錢,虛擬主機(jī)提供商會(huì)在一臺(tái)計(jì)算機(jī)上分配許多虛擬主機(jī),讓每個(gè)人都可以使用默認(rèn)的80端口訪問他們的域名而不會(huì)有任何問題。這是怎么做到的呢?
如果你有使用Nginx、Apache或IIS等網(wǎng)絡(luò)服務(wù)器的經(jīng)驗(yàn),你可能對主機(jī)頭的概念有所了解。主機(jī)頭實(shí)際上就是域名。通過設(shè)置主機(jī)頭,我們的程序可以共享一個(gè)網(wǎng)絡(luò)端口。
在Nginx等網(wǎng)絡(luò)服務(wù)器中部署網(wǎng)站時(shí),我們配置它以在主機(jī)頭中包含域名。
啟動(dòng)時(shí),Nginx和其他網(wǎng)絡(luò)服務(wù)器會(huì)將80端口占為己用。
當(dāng)網(wǎng)站請求到達(dá)Nginx的80端口時(shí),它會(huì)根據(jù)請求中的域名識(shí)別出配置了相應(yīng)主機(jī)頭的網(wǎng)絡(luò)程序。
然后,Nginx會(huì)將請求轉(zhuǎn)發(fā)給該網(wǎng)絡(luò)程序,如果需要,啟動(dòng)它。
除了127.0.0.1,還有很多私有IP地址,例如常見的192.168.x.x。這些私有IP地址大多保留用于局域網(wǎng)(LAN)內(nèi)使用,因?yàn)闉槊颗_(tái)計(jì)算機(jī)分配唯一的IP地址是不現(xiàn)實(shí)的。只要在局域網(wǎng)內(nèi)部沒有沖突,這些地址可以自由使用。你的公司可以使用192.168.1.1,我的公司也可以使用192.168.1.1,但如果你想訪問我的公司,你需要通過公共IP地址。
常用的IPv4私有IP地址范圍分為三個(gè)類別:
這些私有IP地址僅供內(nèi)部網(wǎng)絡(luò)使用,不能用于公共互聯(lián)網(wǎng)。
除了上述三種私有IPv4地址范圍,還有一些保留的IPv4地址范圍:
127.0.0.0到127.255.255.255地址范圍用于回環(huán)測試,包括問題中提到的127.0.0.1地址。你還可以分配給自己一個(gè)類似127.0.0.2的IP地址,它的功能與127.0.0.1相同。169.254.0.0到169.254.255.255地址范圍用于局域網(wǎng)內(nèi)部。這種情況較少見,如果你的計(jì)算機(jī)無法連接到局域網(wǎng),可能會(huì)看到這個(gè)IP地址,它是臨時(shí)分配的局域網(wǎng)地址。 這些地址范圍也不能用于公共互聯(lián)網(wǎng)。
還有一些不太常見的專用IPv4地址范圍。IP地址范圍的完整定義可以在這里找到:www.iana.org/assignments……
你可能也聽說過IPv6,它是為了應(yīng)對IPv4地址空間不足的問題,引入的IPv6地址數(shù)量非常多,理論上可以為地球上的每一粒沙子分配一個(gè)IP地址。盡管多年來一直在談?wù)摚獻(xiàn)Pv4仍然更為廣泛使用。這背后的原因很多,這里不做討論。
IPv6地址的格式如下:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX。它有128位長,由冒號(hào)分為8段,每個(gè)X代表一個(gè)十六進(jìn)制數(shù)(從0到F)。IPv6 地址空間比IPv4大得多。例如,2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b是一個(gè)有效的IPv6地址。
本文鏈接:http://m.www897cc.com/showinfo-26-91025-0.htmllocalhost 和 127.0.0.1 有什么區(qū)別?
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com
上一篇: 一道字節(jié)面試題,把群友整不會(huì)了,關(guān)于 useMemo 用法的另外一個(gè)延伸
下一篇: 了解結(jié)構(gòu)化數(shù)據(jù)與非結(jié)構(gòu)化數(shù)據(jù)的差異