← 全部文章

如何在手机上访问 localhost 本地网站(真机与手机视图)

在真机或手机视图中打开本地开发网站:局域网 IP 与 --host、Chrome 端口转发、内网穿透隧道、模拟器中的地址,以及常见问题的解决方法。

要在手机上打开 localhost 网站,先让开发服务器监听网络(通常加上 --host 参数),把手机连到同一个 Wi-Fi,然后访问电脑的局域网 IP 加端口,例如 http://192.168.1.20:5173。如果网络不允许这样连接,可以通过 USB 使用 Chrome 端口转发,或者用隧道。如果你只是想看移动端布局,甚至不需要手机,直接在桌面版 Chrome 里用手机视图打开 localhost 即可。

最快的方法:在桌面版 Chrome 中用手机视图打开 localhost

电脑上的 localhost 在任何桌面工具里都能访问,无需任何网络设置:

  • Chrome DevTools 设备模式:打开 DevTools,按 Ctrl + Shift + M(Mac 上为 Cmd + Shift + M)切换设备工具栏,选择一款手机。参见 Chrome 手机模拟器使用指南。
  • 支持本地页面的手机视图扩展。Mobile View Extension 可以在 localhost 上运行,在本地页面之间切换时也会保持手机视图,开发时可以一直开着。

很多在线“响应式检测”工具做不到这一点,因为它们是从自己的服务器加载你的网址,访问不到你的电脑。

当你需要真实的触控、真实的键盘或 Safari 时,再换到手机上。

方法一:同一 Wi-Fi + 电脑的局域网 IP

1. 让开发服务器监听所有网络接口

大多数开发服务器默认只监听 localhost(127.0.0.1),其他设备无法访问。让它们监听网络:

工具 命令
Vite npm run dev -- --host
Astro npm run dev -- --host
Next.js next dev -H 0.0.0.0
Create React App / webpack dev server 设置 HOST=0.0.0.0 或 host: '0.0.0.0'
Python python -m http.server 8000 --bind 0.0.0.0

Vite 和 Astro 加上 --host 启动后,会显示一个“Network”地址。在手机上打开的就是这个地址。

2. 查找本机局域网 IP

如果工具没有显示:macOS 上打开 系统设置 > Wi-Fi > 详细信息;Windows 上运行 ipconfig,找到 IPv4 地址;Linux 上运行 ip addr。地址通常以 192.168. 或 10. 开头。

3. 在手机上打开

把手机连到同一个 Wi-Fi 网络,访问 http://<你的IP>:<端口>。

如果打不开

  • 防火墙。 macOS 和 Windows 可能会拦截对 Node 或 Python 的入站连接。出现提示时允许该应用,或为该端口添加规则。
  • 访客网络或办公网络。 很多这类网络会把设备相互隔离(“客户端隔离”)。请改用方法二或方法三。
  • 写死的 localhost 地址。 如果前端请求的是 http://localhost:8080/api,手机会去连接它自己。请改用相对路径,或者用环境变量配置 API 地址。
  • CORS 和 Cookie。 新的源(192.168.1.20:5173)可能会让只允许 localhost 的 Cookie 或 CORS 配置失效。

方法二:Chrome 端口转发到安卓手机

如果安卓手机通过 USB 连接并开启了 USB 调试,Chrome 可以把手机上的端口映射到你的电脑:

  1. 在电脑上打开 chrome://inspect/#devices。
  2. 点击 Port forwarding,添加端口(例如 5173)和目标 localhost:5173,勾选 Enable port forwarding。
  3. 在手机的 Chrome 中打开 http://localhost:5173。

由于手机使用的是 localhost,Cookie 和 CORS 的行为与电脑上一致,还可以在桌面 DevTools 中检查页面。开启 USB 调试的步骤见在电脑上测试安卓端网页。

方法三:带公共 HTTPS 地址的隧道

隧道(内网穿透)会给本地服务器分配一个临时的公网地址。它在任何网络下都能用,并且提供 HTTPS,而有些功能必须用 HTTPS(Service Worker、地理定位、摄像头、安全 Cookie)。

两种常用方案:

  • Cloudflare Tunnel:cloudflared tunnel --url http://localhost:5173 会输出一个临时的 trycloudflare.com 地址。
  • ngrok:ngrok http 5173 会输出一个转发地址(需要免费账号)。

隧道运行期间,任何拿到地址的人都能访问你的开发服务器,所以用完请关闭,也不要暴露管理后台或真实数据。有些框架默认会拦截未知的主机名,例如 Vite 需要把隧道域名加到 server.allowedHosts 中。

方法四:模拟器

  • Xcode Simulator(Mac): 与 Mac 共用网络,所以在模拟的 Safari 中可以直接打开 http://localhost:5173。参见没有 iPhone 如何测试网站。
  • Android Studio 模拟器: 其中的 localhost 指向模拟器本身。要访问电脑,请使用 http://10.0.2.2:5173。

该用哪种方法

场景 方法
写代码时检查布局 桌面版 Chrome 的手机视图
在家用自己的手机测试触控和键盘 同一 Wi-Fi + 局域网 IP
安卓手机、办公网络、需要 DevTools Chrome 端口转发
仅限 HTTPS 的功能,或要分享给同事 隧道
没有 iPhone 但要看 Safari 的表现 Xcode Simulator

常见问题

为什么手机打不开 localhost?

在手机上,localhost 指的是手机本身。请使用电脑的局域网 IP,并通过 --host 或 0.0.0.0 让开发服务器监听网络。

如何在 iPhone 上测试 localhost?

使用同一 Wi-Fi 和电脑的 IP 地址,或使用隧道,或在 Mac 上用 Xcode Simulator,在那里 localhost 可以直接使用。

没有手机能看 localhost 的手机版吗?

可以。使用 DevTools 设备模式,或支持本地页面的手机视图扩展。

用手机视图查看你的下一个网站。

添加扩展,在你正在使用的标签页中直接打开设备预览。