localhost和127.0.0.1的区别
前端项目在本地调试时,通常与localhost进行交互——只需运行npm run
命令即可在浏览器中打开网页,地址栏会显示类似http://localhost:xxx/index.html的地址。
1. localhost
本质上是一个域名,与日常访问互联网使用的域名(如baidu.com)没什么根本差异,只是更便于记忆。作用范围仅限于本机:从名称中的"local"(本地)即可知,它指向当前设备本身。不同用户(如张三和李四)可以在各自电脑上互不干扰地使用localhost,访问的始终是本机的页面内容。
要理解localhost,需先了解用户通过域名访问程序的完整流程。以访问baidu.com为例:
1.1 浏览器输入baidu.com后,首先向DNS查询该域名对应的IP地址。
为什么需要IP地址?类比快递寄送:邮寄包裹需填写收件方公司地址、名称和接收人信息。快递系统依赖物理地址进行路由最终送达。网络世界中域名如同公司名称,IP地址则是物理地址。数据包传输必须依赖IP地址定位目标程序。
DNS就像企业通讯录,记录着域名与IP的映射关系。未注册的域名无法查询到IP,而某些域名可能对应多个IP(DNS会根据规则返回其中一个)。购买域名后,域名服务商通常会提供DNS解析服务,将域名与IP的对应关系注册到DNS系统中。
IP地址来源:所有联网设备都拥有IP地址,但个人电脑的IP通常不适合直接对外提供服务(如同公司内部位置只有内部人员清楚)。像Baidu这样的对外服务需要公网IP,一般由网络服务商(如中国移动)分配给企业网关服务器。网关服务器如同总机接线员,处理所有内外网通信,并通过转发规则将外部请求导向内部服务器。
1.2 获取IP后,浏览器向该地址发送请求
操作系统将请求打包为IP数据包,通过网络路由协议经由多个路由器传输,最终抵达绑定该IP的计算机。
1.3 单台计算机可能部署多个网络应用
如何确定接收请求的程序?此时端口(Port)发挥作用:每个网络应用可绑定一个或多个端口(系统禁止端口冲突)。请求中指定端口即可路由到正确程序。
访问Baidu时没有显式指定端口,是因为默认使用标准端口(HTTP为80,HTTPS为443)。启动网络程序时必须绑定端口,部分框架会自动选择本机空闲端口。
2. localhost与127.0.0.1的区别
• localhost是域名
• 127.0.0.1是IP地址,特指本地环回地址(loopback address),仅能在本机使用。该地址无需联网即可访问,极大便利网络程序的开发测试。我们调试的程序正是绑定在此IP上。
localhost如何解析为127.0.0.1?需要经过DNS吗?
答案是不需要。每台计算机都可不经DNS解析直接使用localhost和127.0.0.1。 解析由各设备自主完成:所有操作系统 hosts文件 中均预设了硬编码的DNS解析规则,其中包含"localhost → 127.0.0.1"的映射。你可以使用自定义名称(如wodehost)并映射到127.0.0.1,甚至可以将baidu.com指向127.0.0.1(仅对本机生效)。
补充:域名层级体系
localhost与常规域名(如www.juejin.cn、csdn.net)形态不同。为什么localhost不需要cn/com/net
等后缀?
域名采用分层结构:
• 顶级域名(TLD):位于最右侧,分为通用顶级域(.com商业/.net网络/.org非营利)和国家代码顶级域(.cn中国/.uk英国)。
• 二级域名(SLD):注册者自选名称(如juejin.cn)。用户通常申请的就是二级域名,TLD的实际意义已被弱化 。
• 三级域名(3LD):用于指向特定服务器或子网(如blog.example.com中的"blog")。最常见的"www"仅是惯例(现多推荐直接使用二级域名访问)。
按照这种定义,localhost可视为保留的顶级域名,专用于访问本机。