如何使用PowerShell发起HTTP/3 QUIC网络请求?
如何在PowerShell中发起HTTP/3网络请求
问题根源
PowerShell的Invoke-WebRequest和Invoke-RestMethod底层依赖.NET的HttpClient。尽管PowerShell Core 7.3.3基于支持HTTP/3的.NET 7,但默认的HttpClient实例并未启用HTTP/3支持——即使指定-HttpVersion 3.0,也会自动降级到HTTP/2。
解决方案
要发起真正的HTTP/3请求,需要手动创建配置了HTTP/3的HttpClient实例,步骤如下:
确认系统支持QUIC
- Windows:需Windows 11/Server 2022及以上版本,或Windows 10安装KB5003237及后续更新
- Linux/macOS:确保系统已安装支持QUIC的依赖库(如libmsquic)
使用自定义HttpClient发起请求
以下是可直接运行的PowerShell代码:# 导入.NET相关命名空间 using namespace System.Net.Http using namespace System.Net.Http.Headers # 创建HttpClientHandler并配置TLS 1.3(HTTP/3依赖TLS 1.3) $handler = [HttpClientHandler]::new() $handler.SslProtocols = [System.Security.Authentication.SslProtocols]::Tls13 # 创建HttpClient,指定默认请求版本为HTTP/3.0,且强制使用该版本不降级 $client = [HttpClient]::new($handler) $client.DefaultRequestVersion = [HttpVersion]::Http30 $client.DefaultVersionPolicy = [HttpVersionPolicy]::RequestVersionExact # 发起HTTP/3请求 $response = $client.GetAsync("https://quic.nginx.org/test").Result # 输出结果 Write-Host "响应HTTP版本: $($response.Version)" Write-Host "状态码: $($response.StatusCode)" Write-Host "响应头:" $response.Headers | Format-List
关键配置说明
DefaultRequestVersion = [HttpVersion]::Http30:明确指定请求使用HTTP/3.0DefaultVersionPolicy = [HttpVersionPolicy]::RequestVersionExact:禁止客户端自动降级到更低版本的HTTP协议SslProtocols = [System.Security.Authentication.SslProtocols]::Tls13:HTTP/3强制要求使用TLS 1.3
内容的提问来源于stack exchange,提问作者Trevor Sullivan
相关产品推荐
相关产品推荐

