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
相关产品推荐
相关产品推荐

