大数跨境

了解 Localhost:输入它时会发生什么?

了解 Localhost:输入它时会发生什么? 索引目录
2025-02-27
0

无论您是开发 React 应用的前端开发人员,还是调试 API 的后端工程师,localhost 都是您旅程的起点。输入npm run dev,您的浏览器就会打开http://localhost:3000。但是当您输入“localhost”时实际上会发生什么?让我们揭开这个网络基石的层层面纱。


什么是 Localhost?

Localhost 不仅仅是技术术语——它是一个保留域名,始终指向您自己的机器。可以将其视为您计算机的自有地址。当 Johnlocalhost在笔记本电脑上打字,而 Jane 在台式机上打字时,他们各自访问的是自己的设备,没有任何重叠。


Localhost 的工作原理:DNS 与环回

为了理解 localhost,让我们将其与典型的 Web 请求进行对比:

  1. 输入“google.com”

  • 您的浏览器查询 DNS 服务器以将域名解析为 IP(例如142.250.189.206)。

  • 该请求通过互联网路由到 Google 的服务器。


  1. 输入“localhost”

  • 无需 DNS!您的操作系统会立即映射localhost到环回 IP 127.0.0.1

  • 请求永远不会离开你的机器。相反,它会通过环回接口(用于自我通信的虚拟网卡)进行内部处理。



127.0.0.1:环回地址解释

环回地址 ( 127.0.0.1) 是为自引用流量保留的特殊 IP。当您的应用监听 时127.0.0.1:3000,它会说“我只接受来自这台机器的请求”。

Localhost 在哪里定义?

  • Linux / macOS/etc/hosts

  • 窗户C:\Windows\System32\drivers\etc\hosts

该文件包含以下行:

127.0.0.1    localhost

这会硬编码映射,覆盖 DNS。有趣的事实:整个127.x.x.x范围都保留用于环回,但这127.0.0.1是标准。


为什么选择 3000 端口?默认端口正在开发中

当你运行 时npm run dev,React 或 Next.js 等工具默认使用端口 3000。其他常见的默认值:

  • Node.js/Express:3000、8000

  • Python/Flask:5000

  • Ruby on Rails:3000

  • Apache/Nginx:80(HTTP)或 443(HTTPS)

端口冲突?使用lsof -i :3000(Unix) 或netstat -ano | findstr :3000(Windows) 来识别并终止阻塞进程。


修改 Hosts 文件:谨慎操作

您可以将自定义域映射到127.0.0.1本地测试。例如:

127.0.0.1    mytestsite.dev

现在,mytestsite.dev解析到您的机器。但要注意

  • 编辑 hosts 文件需要管理员权限。

  • 拼写错误可能会破坏网络功能。请务必先备份文件!


IPv4 与 IPv6:本地主机的双重身份

  • IPv4127.0.0.1

  • IPv6::1

运行ping localhost以查看您的系统偏好哪一个:

# IPv4 response
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.045 ms

# IPv6 response
64 bytes from ::1: icmp_seq=0 ttl=64 time=0.045 ms

大多数框架默认使用 IPv4。要同时支持这两种协议,请将您的服务器配置为监听0.0.0.0(IPv4) 或::(IPv6)。


为什么 Localhost 对开发人员很重要

  1. 离线开发

    无需互联网即可测试应用程序——这对于在受限环境(例如飞机、偏远地区)中调试至关重要。

  2. 安全

  • 安全地测试身份验证流程(OAuth 重定向以localhost避免在线暴露令牌)。

  • 数据库连接通过127.0.0.1与外部网络保持隔离。


  1. 速度

    绕过网络延迟。在本地无噪音地对 API 性能进行基准测试。

  2. 隐私

    本地主机流量永远不会接触您的物理网卡,因此不会被窃听。


代码中的 Localhost:语言示例

Python

import socket
print(socket.gethostbyname("localhost")) # Output: 127.0.0.1

Java

import java.net.InetAddress;

public class LocalhostDemo {
public static void main(String[] args) throws Exception {
// Use getByName("localhost") to force loopback resolution
InetAddress localhost = InetAddress.getByName("localhost");
System.out.println(localhost.getHostAddress()); // Output: 127.0.0.1
}
}

Node.js

const dns = require('dns');

dns.lookup('localhost', (err, address) => {
console.log(address); // Output: 127.0.0.1 or ::1
});

公共 IP、私有 IP 和环回 IP


类型 例子 目的
民众 8.8.8.8 全局可路由(由 ISP 分配)。
私人的 192.168.1.1 本地网络使用(启用 NAT)。
回送 127.0.0.1 机器内部通信。



常见陷阱及解决方法

  1. “端口已在使用中”

  • Unixkill -9 $(lsof -ti:3000)

  • 窗户taskkill /F /PID <process_id>


  1. Docker 隔离

    容器具有隔离网络。通过以下方式访问主机的本地主机:

  • host.docker.internal(Docker 桌面)

  • --network="host"标志(Linux)


  1. 防火墙阻止请求

    确保本地主机在防火墙设置中列入白名单。


超越 Localhost:分享你的工作

ngroklocalhost.run等工具将 localhost 暴露给互联网:

ngrok http 3000  # Creates a public URL (e.g., https://abc123.ngrok.io)

非常适合测试 webhook、共享演示或在移动设备上调试。


最后的想法

下次加载时localhost:3000,请记住:

  1. 您的操作系统映射localhost127.0.0.1,跳过 DNS。

  2. 环回接口将流量保持在内部。

  3. 您的本地服务器(React、Flask 等)处理请求。

从调试到部署,localhost 都是开发中的无名英雄。准备好升级了吗?深入了解 localhost 的 HTTPS 配置或探索 Docker 的网络模型。



【声明】内容源于网络
0
0
索引目录
索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
内容 444
粉丝 0
索引目录 索引目录是一家专注于医疗、技术开发、物联网应用等领域的创新型公司。我们致力于为客户提供高质量的服务和解决方案,推动技术与行业发展。
总阅读544
粉丝0
内容444