为什么同事访问不了你的本地服务?一文彻底搞懂局域网、hosts文件与跨域原理!

1,562 阅读3分钟

在本地开发时,我们经常遇到这样的场景:
我在自己电脑上搭建了一个Web服务,同事想在他的电脑上访问我的服务,结果却怎么也打不开,或者遇到跨域问题。

你是不是也曾经为此困惑?今天这篇文章,带你彻底搞懂局域网访问、本地DNS解析(hosts文件)、服务监听地址以及跨域的全部原理!


一、hosts文件是什么?本地DNS解析怎么回事?

当你输入一个域名(比如mylocal.test)时,操作系统首先会查找本地的hosts文件,看有没有对应的IP映射。如果有,就直接用这个IP,不再去外部DNS服务器查询。这种方式就叫本地DNS解析

举个例子:

127.0.0.1   mylocal.test

这行配置的意思是:无论何时访问mylocal.test,都指向本机(127.0.0.1)。

原理小结:

  • hosts文件优先级高于外部DNS
  • 只对本机生效,别人电脑无感知

二、为什么同事用hosts也访问不了你的服务?

如果你的同事在他的电脑上也加上了:

127.0.0.1   mylocal.test

然后访问http://mylocal.test:3000,结果还是打不开你的服务,为什么?

原因是:

  • 127.0.0.1在每台电脑上都代表“自己”,不是你那台电脑。
  • 他访问的其实是他自己电脑的服务,并没有访问到你的电脑!

三、正确的网络访问方案

想让同事访问你的本地服务,应该怎么做?

1. 获取你的局域网IP

在你的电脑上,通过命令行获取局域网IP(如192.168.1.100)。

2. 同事的hosts文件配置

让同事在他的hosts文件里加上:

192.168.1.100   mylocal.test

这样,他访问mylocal.test时,就会去找你的电脑。

3. 服务监听地址要对外

启动你的Web服务时,监听0.0.0.0而不是127.0.0.1

  • 127.0.0.1:只允许本机访问
  • 0.0.0.0:允许局域网内其他设备访问

四、 跨域问题的本质与解决方法

4.1 什么是跨域?

跨域是指:浏览器出于安全考虑,限制了不同“源”(协议、域名、端口不同)之间的请求,防止恶意网站窃取数据。

4.2 跨域的常见场景

  • 前端页面在 A 服务器,接口在 B 服务器
  • 本地开发时,前端页面和接口端口不同

4.3 如何解决跨域?

服务端设置 CORS 响应头,允许指定的来源访问。

  • Node.js(Express):

    // 安装cors中间件
    const cors = require('cors');
    app.use(cors()); // 默认允许所有来源
    
  • 手动设置响应头:

    res.setHeader('Access-Control-Allow-Origin', '*');
    

五、总结流程图

同事电脑访问 mylocal.test:3000
      |
      v
hosts 文件解析为 192.168.1.100
      |
      v
请求发往你的电脑(192.168.1.100:3000)
      |
      v
你的服务监听 0.0.0.0,接收并响应请求

六、常见疑问解答

  • Q:局域网IP怎么查?
    A:Windows下用ipconfig,Mac/Linux下用ifconfigip addr
  • Q:为什么要监听0.0.0.0?
    A:否则你的服务只能本机访问,别人访问不到。
  • Q:跨域怎么搞定?
    A:服务端配置CORS响应头,允许指定来源访问。

七、结语

本地开发环境的网络访问、域名解析和跨域问题,看似简单,细节却不少。希望这篇文章能帮你彻底理清思路,少走弯路!如果你有更多相关问题,欢迎留言交流!