为何PowerShell的Invoke-RestMethod请求localhost耗时过长?
解决思路
1. 调整hosts文件解析顺序
打开C:\Windows\System32\drivers\etc\hosts文件,确认127.0.0.1 localhost条目位于::1 localhost(IPv6)条目之前。如果IPv6条目在前,PowerShell会优先尝试IPv6解析,失败后再 fallback 到IPv4,这会产生明显延迟。调整顺序后保存文件即可生效。
2. 强制系统优先使用IPv4
通过修改网络协议的接口度量值,让系统优先选择IPv4:
Set-NetIPProtocol -Protocol IPv6 -InterfaceMetric 4294967295
若后续需要恢复IPv6优先级,执行:
Set-NetIPProtocol -Protocol IPv6 -InterfaceMetric 10
3. 在irm调用中指定IPv4解析
手动获取localhost对应的IPv4地址,再拼接URL发起请求,跳过系统自动解析的步骤:
$ipv4Addr = [System.Net.Dns]::GetHostAddresses("localhost") | Where-Object { $_.AddressFamily -eq 'InterNetwork' } | Select-Object -First 1 irm "http://$($ipv4Addr.IPAddressToString):8080"
4. 重置DNS客户端缓存
重启DNS客户端服务,清除可能存在的无效解析缓存:
Restart-Service dnscache
内容的提问来源于stack exchange,提问作者Daniel Oliveira
相关产品推荐
相关产品推荐

