You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用HTTP/2时Azure App Service连接断开问题求助

ASP.NET网站在Azure App Service上HTTP/2下特定页面连接重置的解决方案

问题现象

部署在Azure App Service的ASP.NET站点,某特定页面在HTTP/2请求时会在1秒内被断开连接,curl测试返回如下错误:

* Recv failure: Connection reset by peer
* LibreSSL SSL_read: Connection reset by peer, errno 54
* Failed receiving HTTP2 data: 56(Failure when receiving data from the peer)
* Connection #0 to host my-website.azurewebsites.net left intact
curl: (56) Recv failure: Connection reset by peer

站点日志显示返回200响应,但实际连接被重置;使用curl --http1.1参数请求该页面正常,禁用HTTP/2后浏览器可正常访问。

排查与解决步骤

1. 检查响应头部与内容长度一致性

HTTP/2对响应规范的校验比HTTP/1.1更严格,若页面存在以下情况,Azure的HTTP/2代理可能直接重置连接:

  • Content-Length头部声明的长度与实际响应内容长度不匹配
  • 同时设置了Transfer-Encoding: chunked和Content-Length头部
  • 自定义头部包含大写字母(HTTP/2要求头部名称必须小写)

解决方式:

  • 移除手动设置的Content-Length,让ASP.NET框架自动处理响应长度
  • 检查并修正所有自定义头部,确保名称为小写
  • 避免同时启用分块编码和固定内容长度的配置

2. 排查流式响应/长连接处理问题

如果该页面是流式输出(如大文件下载、实时数据推送),HTTP/2的流处理逻辑与HTTP/1.1存在差异,Azure代理可能因超时或未正确关闭流而强制断开连接:

解决方式:

  • 为响应设置合理的Response.Timeout值,避免1秒内触发超时
  • 大文件下载场景,直接使用Azure Blob Storage提供下载服务,绕过ASP.NET站点中转
  • 检查代码中是否存在未正确关闭的响应流,确保请求完成后释放资源

3. 升级.NET运行时版本

旧版本的.NET框架(尤其是.NET Core 3.1及更早版本)存在部分HTTP/2兼容性bug,可能导致特定场景下的连接重置:

解决方式:

  • 将.NET运行时升级到对应分支的最新稳定版本(如.NET 6/7/8的最新补丁版)
  • 检查web.config中是否存在与HTTP/2冲突的自定义配置,移除无效的HTTP协议相关设置

4. 检查Azure App Service代理与SSL配置

Azure App Service的前端代理对HTTP/2有特定要求,若配置不符合规范会导致连接异常:

解决方式:

  • 确认站点使用的SSL证书是TLS 1.2及以上版本(HTTP/2不支持旧版SSL协议)
  • 在Azure门户的App Service「配置」→「常规设置」中,检查HTTP版本设置是否正确启用HTTP/2
  • 若使用了Application Gateway等额外代理,确认其HTTP/2转发配置是否正确

5. 启用Azure详细诊断日志

通过Azure的诊断日志可以获取代理层的错误信息,定位连接重置的具体原因:

操作步骤:

  1. 进入Azure门户的App Service控制台,打开「诊断和解决问题」→「日志」
  2. 启用「Web服务器日志」和「详细错误日志」
  3. 重新触发页面请求,查看日志中是否有HTTP/2相关的错误提示(如流超时、头部校验失败等)

内容的提问来源于stack exchange,提问作者Bouke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:41:00