You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js 18中如何强制Fetch API使用IPv6发起请求?

强制Node.js Fetch API使用IPv6发起请求

可以通过以下几种方式实现,无需修改系统级网络偏好:

1. 全局设置DNS解析优先IPv6(Node.js v17+)

Node.js从v17版本开始支持全局配置DNS解析结果顺序,在代码开头添加一行配置,后续所有Fetch请求都会优先选用IPv6:

const dns = require('dns');
dns.setDefaultResultOrder('ipv6first');

// 后续的Fetch请求将优先走IPv6
async function fetchWithIPv6() {
  const response = await fetch('https://example.com');
  console.log('请求实际使用地址:', response.url);
}
fetchWithIPv6();

2. 针对单个请求手动指定IPv6地址

如果只想让特定请求走IPv6,可以先手动解析域名的IPv6地址,再用该地址构造请求URL(注意IPv6地址需要放在方括号[]内):

const dns = require('dns').promises;

async function fetchSpecificIPv6() {
  // 解析目标域名的IPv6地址列表
  const ipv6Addresses = await dns.resolve6('example.com');
  // 取第一个IPv6地址构造请求URL
  const ipv6Url = `https://[${ipv6Addresses[0]}]/`;
  
  const response = await fetch(ipv6Url, {
    // 必须设置Host头,否则服务器无法识别请求的域名
    headers: { 'Host': 'example.com' }
  });
  console.log('请求使用的IPv6地址:', ipv6Addresses[0]);
}
fetchSpecificIPv6();

3. 通过环境变量全局生效

不想修改代码的话,启动Node.js进程时通过环境变量指定DNS解析顺序,整个进程的所有请求都会优先使用IPv6:

NODE_OPTIONS="--dns-result-order=ipv6first" node your-script.js

注意事项

  • 第一种和第三种方法仅支持Node.js v17及以上版本,低版本不支持dns.setDefaultResultOrder和--dns-result-order参数。
  • 如果目标域名没有IPv6解析记录,这些方法会自动降级到IPv4,不会导致请求失败。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:13:13