localhost 和 127.0.0.1 有什么区别?

当前端开发人员在本地调试时,他们经常与 localhost 互动,只需运行npm run命令就可以在浏览器中打开他们的网页,地址栏显示类似于 http://localhost:xxx/index.html的内容。

许多人在使用它时可能没有思考两者之间的区别。

考虑到我过去与开发人员合作时他们也缺乏对这两者区别的清晰理解,我觉得有必要在这个话题上传播一些知识。

什么是localhost?

localhost 是一个域名,从根本上说,与用于互联网访问的域名没有什么不同,只是它更容易记忆。

localhost 的范围仅限于本地机器——它的名字说明了一切:“local”指的是本地的东西。

John Smith 和 Jane Doe 都可以在各自的机器上使用 localhost,而不会相互干扰,访问他们各自的页面内容。

从域名到程序

要真正理解 localhost,我们需要讨论用户是如何通过域名访问程序的,以谷歌为例。

1.在浏览器中输入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”有什么区别?

在了解了基础知识后,我们可以更容易地理解这个问题。

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

这个解析是由每台计算机独立处理的。每台计算机上都有一个hosts文件,里面包含一些硬编码的DNS解析规则,包括将localhost解析到127.0.0.1的规则,这是一个约定。

如果你不想使用localhost,也没问题。你可以将其命名为任何名称,如wodehost,并将其解析到127.0.0.1

你甚至可以使用google.com,但这只会对你自己有效,不会影响到其他任何人。

域名层级

localhost与我们通常使用的域名,如 www.juejin.cngoogle.comcsdn.net不太一样。wwwcncomnet代表什么?为什么localhost不需要它们?

域名是分层的,分为顶级域名(TLD)、二级域名(SLD)和三级域名(3LD)等。

顶级域名(TLD):域名系统中的最高级别,位于域名最右边,通常由几个字母组成。TLD分为通用TLD和国家代码TLD,常见的通用TLD包括.com用于商业企业、.net用于网络提供商、.org用于非营利组织,而国家代码TLD代表特定国家或地区,如.cn代表中国和.uk代表英国。

二级域名(SLD):位于TLD之下,由注册者选择并注册,可以是一个个性化和易记的名称。例如,juejin.cn是一个二级域名,这通常是我们可以申请的。顶级域名如.com.net.cn的意义通常被忽略,以便简短和易记。

三级域名(3LD):位于二级域名之下,通常用于指向特定服务器或子网。在blog.example.com中,“blog”是一个三级域名。“www”是最常见的三级域名,代表网站的主页或主站,尽管这只是一个约定,现在许多网站建议通过二级域名直接访问。

根据这个定义,我们可以将localhost视为一个顶级域名,尽管是一个保留的,仅用于访问当前计算机的顶级域名。

多个网站共享一个IP和端口

如前所述,不同的网络程序不能使用相同的端口,但有方法可以绕过这个限制。

在个人博客流行的时候,许多人喜欢购买虚拟主机并部署一个开源博客平台来表达自己。为了赚钱,虚拟主机提供商会在一台计算机上分配许多虚拟主机,让每个人都可以使用默认的80端口访问他们的域名而不会有任何问题。这是怎么做到的呢?

如果你有使用Nginx、Apache或IIS等网络服务器的经验,你可能对主机头的概念有所了解。主机头实际上就是域名。通过设置主机头,我们的程序可以共享一个网络端口。

在Nginx等网络服务器中部署网站时,我们配置它以在主机头中包含域名。

启动时,Nginx和其他网络服务器会将80端口占为己用。

当网站请求到达Nginx的80端口时,它会根据请求中的域名识别出配置了相应主机头的网络程序。

然后,Nginx会将请求转发给该网络程序,如果需要,启动它。

私有IP地址

除了127.0.0.1,还有很多私有IP地址,例如常见的192.168.x.x。这些私有IP地址大多保留用于局域网(LAN)内使用,因为为每台计算机分配唯一的IP地址是不现实的。只要在局域网内部没有冲突,这些地址可以自由使用。你的公司可以使用192.168.1.1,我的公司也可以使用192.168.1.1,但如果你想访问我的公司,你需要通过公共IP地址。

常用的IPv4私有IP地址范围分为三个类别:

  • A类:从10.0.0.0到10.255.255.255

  • B类:从172.16.0.0到172.31.255.255

  • C类:从192.168.0.0到192.168.255.255

这些私有IP地址仅供内部网络使用,不能用于公共互联网。

除了上述三种私有IPv4地址范围,还有一些保留的IPv4地址范围:

127.0.0.0127.255.255.255地址范围用于回环测试,包括问题中提到的127.0.0.1地址。你还可以分配给自己一个类似127.0.0.2的IP地址,它的功能与127.0.0.1相同。169.254.0.0169.254.255.255地址范围用于局域网内部。这种情况较少见,如果你的计算机无法连接到局域网,可能会看到这个IP地址,它是临时分配的局域网地址。 这些地址范围也不能用于公共互联网。

还有一些不太常见的专用IPv4地址范围。IP地址范围的完整定义可以在这里找到:www.iana.org/assignments……

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地址。

关于IPv6的进一步讨论超出了本文的范围,但有兴趣的人可以进一步探索。

最后:

vue2与vue3技巧合集

VueUse源码解读

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SDK之嵌入式C

简介 嵌入式系统是指内置于各种设备中的微型计算机系统,与外部环境紧密交互,能够完成特定功能的计算机系统。这类系统广泛应用于工业控制、消费电子、汽车电子、医疗设备等领域。 嵌入式系统与普通的桌面计算机系统有很大不同,它们通常具有以下特点: 资源受限 嵌入式系统的…

探秘NumPy的奥秘:元素级操作与广播机制

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、NumPy基础与元素级操作 元素级操作的引入 元素级操作详解 广播机制初探 二、NumPy矩…

Linux操作指令大全

目录 🍉引言 🍉 基础命令 🍈pwd 🍈cd 🍈ls 🍈mkdir 🍈rmdir 🍈cp 🍈mv 🍈rm 🍉 文件操作命令 🍈cat 🍈tac …

C语言怎样利⽤好敏感的内存资源?

一、问题 内存是⼀个很敏感的资源,就像敏感肌肤⼀样,要百般呵护。同时,内存资源又很复杂,如何正确地使⽤内存资源不容易,能够正确并且合理地利⽤好内存资源就更不容易。 下⾯通过⼀个例⼦,来讲解怎样利⽤好…

深度神经网络——什么是混淆矩阵?

概述 混淆矩阵是一种在机器学习和数据科学中广泛使用的分析工具,用于评估分类模型的性能。它通过比较实际类别和模型预测的类别来提供模型性能的详细信息。以下是混淆矩阵的一些关键点: 结构:混淆矩阵是一个表格,通常有两行两列&…

QT全局气泡类型提示框【自动宽度、多屏自适应居中】

参考 qt 消息弹出框 &#xff0c;无框&#xff0c;缓慢自动消失_new messagetips格式-CSDN博客 进行改进。 直接上代码。 头文件&#xff1a; #pragma once#include <QObject> #include <QWidget>class MessageTips : public QWidget {Q_OBJECTpublic:MessageTi…

stm32-USART串口外设

配置流程 初始化配置 1.开启时钟&#xff08;打开USART和GPIO的时钟&#xff09; void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); void RCC_APB1Periph…

游戏子弹类python设计与实现详解

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、子弹类设计思路 1. 属性定义 2. 方法设计 三、子弹类实现详解 1. 定义子弹…

ubuntu openvoice部署过程记录,解决python3 -m unidic download 时 unidic无法下载的问题

github给的安装顺序&#xff1a; conda create -n openvoice python3.9 conda activate openvoice git clone gitgithub.com:myshell-ai/OpenVoice.git cd OpenVoice pip install -e .安装MeloTTS: pip install githttps://github.com/myshell-ai/MeloTTS.git python -m unid…

tailwindcss 使用

tailwindcss 使用 1、tailwind.config.js 配置参考2、tailwind.css 配置3、动态生成css类名4、配置了qiankun后&#xff0c;layer不解析了 1、tailwind.config.js 配置参考 module.exports {mode: "jit", // 3.0以上可不用配置&#xff0c;默认该模式&#xff0c;无…

新能源汽车的电驱热管理

前言 新能源汽车的电驱热管理是指维持电动汽车电池、电机和电控系统在适宜的工作温度范围内&#xff0c;保障车辆高效、安全、稳定运行的技术方案。随着新能源汽车的快速发展和普及&#xff0c;电驱热管理技术也日益成为关注焦点。本文将从电池、电机和电控系统三个方面介绍新…

cmake配置opencv与boost库

Cmake配置外部依赖库&#xff08;以Opencv和Boost为例&#xff09; Cmake对于外部依赖库&#xff0c;需要知道外部库的头文件路径&#xff0c;库文件路径以及库的名字。比如&#xff0c;对于要使用的Boost库&#xff0c;需要知道头文件的位置&#xff0c;库目录的位置以及库依…

牛逼!50.3K Star!一个自动将屏幕截图转换为代码的开源工具

1、背景 在当今快节奏的软件开发环境中&#xff0c;设计师与开发者之间的协同工作显得尤为重要。然而&#xff0c;理解并准确实现设计稿的意图常常需要耗费大量的时间和沟通成本。为此&#xff0c;开源社区中出现了一个引人注目的项目——screenshot-to-code&#xff0c;它利用…

vue富文本层级高

在Vue中处理复杂的层级关系&#xff0c;通常可以使用组件和递归组件来构建富文本树形结构。以下是一个简单的例子&#xff0c;展示了如何使用Vue组件来构建一个树形控件 <template><div><tree-node v-for"node in treeData" :key"node.id&quo…

Studio 3T 2024.3 (macOS, Linux, Windows) - MongoDB 的专业 GUI、IDE 和 客户端,支持自然语言查询

Studio 3T 2024.3 (macOS, Linux, Windows) - MongoDB 的专业 GUI、IDE 和 客户端&#xff0c;支持自然语言查询 The professional GUI, IDE and client for MongoDB 请访问原文链接&#xff1a;https://sysin.org/blog/studio-3t/&#xff0c;查看最新版。原创作品&#xff…

智能合作:多AI协同助力传统工作流

背景介绍 红杉资本2024 AI AGENT大会上吴恩达再次介绍了AI四大设计模式即&#xff1a; 反思&#xff08;Reflection)&#xff1b;工具使用&#xff08;Tool use&#xff09;&#xff1b;规划&#xff08;Planning)&#xff1b;多智能体协作(Multi-agent collaboration)&#…

基于深度学习和去卷积的盲源分离方法在旋转机械上的应用

关键词&#xff1a;预测性维护、盲源分离、振动分析、传递函数移除、二阶循环平稳性、轴承监测、机器学习 振动是旋转机械中主要的故障指示器&#xff0c;它们主要来源于两个方面&#xff1a;一个是与齿轮相关的振动&#xff08;主要源于齿轮啮合过程中的冲击和不平衡负载&…

【云原生--K8S】K8S python接口研究

文章目录 前言一、搭建ubuntu运行环境1.运行ubuntu容器2.拷贝kubeconfig文件二、python程序获取k8s信息1.获取node信息2.获取svc信息3.常用kubernetes API总结前言 在前面的文章中我们都是通过kubectl命令行来访问操作K8S,但是在实际应用中可能需要提供更方便操作的图形化界面…

(完全解决)Python字典dict如何由键key索引转化为点.dot索引

文章目录 背景解决方案基础版升级版 背景 For example, instead of writing mydict[‘val’], I’d like to write mydict.val. 解决方案 基础版 I’ve always kept this around in a util file. You can use it as a mixin on your own classes too. class dotdict(dict)…

Flutter 中的 StatusTransitionWidget 小部件:全面指南

Flutter 中的 StatusTransitionWidget 小部件&#xff1a;全面指南 在Flutter中&#xff0c;StatusTransitionWidget不是一个内置的组件&#xff0c;但它可以代表一种自定义小部件的概念&#xff0c;用于在不同的状态之间进行转换。例如&#xff0c;这可以是一个网络加载指示器…