如何使用PowerShell在IIS中为特定站点禁用HTTP/2?
特定IIS站点禁用HTTP/2的实现方案
IIS 10 没有原生支持站点级别的HTTP/2开关,但可以通过以下两种可靠方法实现目标,同时保留其他站点的HTTP/2功能:
方法1:通过URL Rewrite添加响应头强制客户端降级
这是最安全且无兼容性风险的方案,核心是通过响应头告知客户端该站点不支持HTTP/2:
- 确保已安装IIS URL Rewrite模块(可通过服务器管理器→添加角色功能→Web服务器→应用程序开发→URL Rewrite完成安装)。
- 编辑目标站点的
web.config,添加以下配置段:
<system.webServer> <rewrite> <rules> <rule name="Disable HTTP/2 for this site" stopProcessing="true"> <match url=".*" /> <action type="CustomResponse" statusCode="200" /> <serverVariables> <set name="RESPONSE_Alt-Svc" value="clear" /> <set name="RESPONSE_Upgrade" value="http/1.1" /> </serverVariables> </rule> </rules> </rewrite> </system.webServer>
Alt-Svc: clear会清除客户端存储的该站点HTTP/2备选服务记录Upgrade: http/1.1强制客户端使用HTTP/1.1协议发起请求
方法2:切换应用程序池为经典模式(谨慎使用)
HTTP/2仅在IIS应用程序池的集成模式下支持,切换为经典模式会自动禁用该站点的HTTP/2,但此方法可能影响依赖集成模式的ASP.NET等应用,需提前测试:
- 以管理员身份运行PowerShell,执行以下命令:
- 获取目标站点的应用程序池名称:
Get-IISSite -Name "你的站点名称" | Select-Object -ExpandProperty ApplicationPool- 修改应用程序池为经典模式:
Set-ItemProperty "IIS:\AppPools\你的应用程序池名称" -Name managedPipelineMode -Value Classic
验证禁用效果
使用curl命令或浏览器开发者工具验证协议版本:
curl -v --http2 https://你的站点域名
若返回的协议为HTTP/1.1,则说明HTTP/2已成功禁用。
内容的提问来源于stack exchange,提问作者Mselmi Ali
相关产品推荐
相关产品推荐

