You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

双网卡环境下通过Postman、浏览器可访问192.168.1.1,但代码请求超时或返回400错误

双网卡环境下代码请求本地服务超时/400的解决思路

先别着急怀疑服务器限制非浏览器连接——毕竟Postman也是非浏览器的HTTP客户端却能正常访问,咱们从这几个方向排查试试:

1. 先确认请求是不是走对了网卡

双网卡环境下,系统默认路由可能会让代码的请求优先走以太网(外网),而不是连接本地网络的WiFi,导致请求根本没到192.168.1.1,要么超时要么走了错误链路返回400。

怎么确认?

  • 打开PowerShell执行 tracert 192.168.1.1,看数据包的跳转路径,如果第一跳是以太网的网关,那就是路由优先级的问题。
  • 在Node.js里可以用 os.networkInterfaces() 打印所有网卡信息,看看代码有没有绑定到正确的WiFi网卡IP。

试试这么做:

  • 临时调整路由优先级:Windows下打开「网络适配器属性」→「IPv4协议」→「高级」,把WiFi网卡的「接口跃点数」设成比以太网小的数值(比如以太网是20,WiFi设10),让本地网络的路由优先。
  • 代码里指定网卡:比如用Axios的话,可以通过httpAgent绑定WiFi网卡的IP:
const axios = require('axios');
const http = require('http');

// 替换成你的WiFi网卡IP,比如192.168.1.100
const localAgent = new http.Agent({ localAddress: '192.168.1.100' });

axios.get('http://192.168.1.1', { httpAgent: localAgent })
  .then(res => console.log(res.data))
  .catch(err => console.error(err));

2. 检查请求头是不是缺了关键字段

浏览器和Postman会自动补全一堆标准请求头(比如User-AgentHostAccept这些),但代码里如果没手动设置,服务器可能识别不了请求,返回400错误。

怎么确认?

对比Postman和代码的请求头:

  • 在Postman里打开请求的「Headers」标签,复制所有自动生成的头;
  • 把这些头原封不动加到代码请求里,再发起请求看看是否正常。

试试这么做:

给代码的请求补上完整的请求头,比如:
Node.js示例:

axios.get('http://192.168.1.1', {
  headers: {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Host': '192.168.1.1'
  }
})

PowerShell示例:

Invoke-WebRequest -Uri "http://192.168.1.1" -Headers @{
  "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
  "Accept" = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
  "Host" = "192.168.1.1"
}

3. 看看服务器的Host绑定配置

你收到的响应里显示Server at localhost Port 80,这说明Apache可能只绑定了localhost(127.0.0.1),没监听192.168.1.1的请求。

怎么确认?

打开Apache的配置文件(比如httpd.conf),找Listen指令,如果是Listen 127.0.0.1:80,那就是只监听本地回环,不会响应192.168.1.1的请求。

试试这么做:

Listen改成Listen 0.0.0.0:80(监听所有网卡的80端口),然后重启Apache服务,这样服务器就能响应来自192.168.1.1的请求了。


内容的提问来源于stack exchange,提问作者Chris Eikrem

火山引擎 最新活动