ASP.NET MVC应用资源加载随机报错:ERR_HTTP_1_1_REQUIRED
解决ASP.NET MVC资源加载随机出现net::ERR_HTTP_1_1_REQUIRED的思路
检查Bundle配置的资源路径与缓存策略
- 确认
BundleConfig.cs中注册的资源路径无特殊字符或相对路径错误,比如bundles.Add(new ScriptBundle("~/bundles/jquery").Include("~/Scripts/jquery-{version}.js"))的路径是否准确,避免IIS解析时在HTTP/2环境下出现路径歧义 - 临时开启web.config的调试模式(
<compilation debug="true"/>)禁用Bundle的实时压缩优化,测试是否是压缩后的资源在HTTP/2传输中触发协议兼容问题;生产环境可尝试预编译Bundle资源,而非依赖实时压缩
- 确认
修复IIS的HTTP/2配置问题
- 确认站点绑定已启用TLS 1.2及以上版本(HTTP/2依赖TLS),TLS配置不全可能导致协议切换异常
- 检查应用程序池的.NET Framework版本匹配情况,必要时启用32位应用程序支持,部分旧版.NET与HTTP/2存在兼容性问题,调整应用池设置可缓解
- 在web.config中添加HTTP协议头配置,强制保持连接的兼容性:
也可在<system.webServer> <httpProtocol> <customHeaders> <add name="Connection" value="keep-alive" /> </customHeaders> </httpProtocol> </system.webServer>Global.asax的Application_BeginRequest事件中添加代码,手动设置响应头,避免HTTP/2自动切换时的协议冲突
优化资源加载的并发请求
- HTTP/2的并发请求处理逻辑与HTTP/1.1不同,大体积的Bundle可能在高并发下出现传输异常。拆分大资源包,减少单个Bundle包含的文件数量,降低加载压力
- 检查服务器的资源限制,比如IIS最大并发连接数、CPU/内存使用率,资源不足时易触发协议层错误
补充客户端兼容配置
- 在响应头中添加
Alt-Svc头,指定HTTP/1.1作为备用协议,让浏览器在HTTP/2请求失败时自动降级:<system.webServer> <httpProtocol> <customHeaders> <add name="Alt-Svc" value="http/1.1=':80'; ma=86400" /> </customHeaders> </httpProtocol> </system.webServer>
- 在响应头中添加
更新框架与服务器组件
- 安装.NET Framework的最新安全补丁与累积更新,旧版本.NET存在HTTP/2协议处理的已知bug
- 更新IIS到最新版本,安装Windows Server的最新系统更新,修复HTTP/2模块的潜在问题
内容的提问来源于stack exchange,提问作者Cédric SICARD
相关产品推荐
相关产品推荐

