为何Azure App Service(.NET栈)React应用启用HTTP2仍使用HTTP1.1
Azure App Service 启用HTTP/2后实际仍使用HTTP/1.1的排障步骤
核心排查维度
- 验证运行实例的底层系统兼容性
HTTP/2 仅可在运行Windows Server 2016及以上版本的App Service实例上生效。部分老旧定价层(P1v1/P2v1/P3v1)、早期部署区域的实例底层仍搭载Windows Server 2012 R2,即使门户、Azure资源管理器都显示HTTP/2开关已开启,实际服务端也不会启用该协议。这类场景需要将站点迁移到新代定价层(P1v2/P1v3等),或调整部署位置到支持新系统版本的节点上。 - 排查全链路的协议透传能力
- 如果站点域名前置接入了CDN、WAF、应用网关等中间转发组件,需要确认组件已开启HTTP/2透传与回源配置,否则浏览器与App Service之间的链路会强制降级为HTTP/1.1。测试阶段可直接绑定App Service默认的
azurewebsites.net域名访问,排除中间转发层的干扰。 - 校验TLS密码套件匹配度:HTTP/2 要求TLS协商阶段必须支持ECDHE类密码套件才能正常握手,即使站点已设置TLS 1.2版本,如果自定义绑定证书的配置缺失
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256等HTTP/2强制要求的密码套件,服务端会自动将协议降级为HTTP/1.1。需要在站点TLS设置中确认未禁用ECDHE类密码套件。
- 如果站点域名前置接入了CDN、WAF、应用网关等中间转发组件,需要确认组件已开启HTTP/2透传与回源配置,否则浏览器与App Service之间的链路会强制降级为HTTP/1.1。测试阶段可直接绑定App Service默认的
- 检查应用层的配置覆盖
针对搭载.NET Core 2.1/3.1栈的React应用,需要检查站点根目录的web.config文件,确认<system.webServer>节点下没有手动写死<http2 enabled="false" />规则,也没有配置清除IIS HTTP/2模块的节点——这类应用层自定义配置会完全覆盖门户层面的HTTP/2开关设置。
生效验证操作
- 完成上述调整后,对站点执行一次完全重启操作(非实例扩容、非交换部署槽位),部分场景下门户的配置变更需要实例冷启动才能加载生效,热加载不会应用新的HTTP/2参数。
- 测试时直接打开浏览器开发者工具的网络面板,选中对应站点请求查看「协议」列标识,确认显示
h2即可,避免使用第三方在线测速工具做判断——这类工具的请求链路和实际用户访问链路可能存在差异,结果不具备参考性。
内容的提问来源于stack exchange,提问作者Harsh darji
相关产品推荐
相关产品推荐

