升级到 Visual Studio 2019 16.10.0 后,React 应用程序“无法加载资源:net::ERR_HTTP2_PROTOCOL_ERROR”

IT技术 reactjs visual-studio .net-core
2021-04-10 19:20:51

升级到 VS 16.10.0(然后是 16.10.1)社区版后,React 网站不再在 Visual Studio/IIS Express 中运行。完全相同的代码刚刚部署到 Azure 应用程序服务并且正常工作。

Chrome (Version 91.0.4472.77 (Official Build) (64-bit)) 调试器控制台首页空白,显示如下错误

“无法加载资源:net::ERR_HTTP2_PROTOCOL_ERROR”

解决方案包括:

  • C# 类库(.NET Core 3.1)
  • C# Web API (.NET Core 3.1)
  • react网站

我尝试了以下方法:

  • 清洁和重建的解决方案
  • 清除浏览器缓存
  • 卸载并重新安装 Visual Studio
  • 将 Visual Studio 从 16.10.0 升级到 16.10.1
  • 运行 npm run build 运行没有错误

附加说明:我能够使用 Visual Studio 2019 v16.9.4 而不是 v16.10.1 还原虚拟机。然后我一步一步安装了最新的 Windows 更新和确切的代码库。该站点在 v16.9.4 中正常运行。所以问题似乎出在 Visual Studio v16.10.0/v16.10.1

转到 VS 开发者社区并为这个问题投票

https://developercommunity.visualstudio.com/t/Failed-to-load-resource:-net::ERR_HTTP2_/1446262

6个回答

这个错误也让我发疯。Windows 10 是在 2 天前更新的,我也将 Visual Studio 更新到了 16.10.1 版。之后,我收到了错误、图像、CSS 加载不正确的问题。

正如 SpeedOfSpin 在上一篇文章的评论中提到的那样,卸载 KB5003637 对我来说立即起作用,没有更多错误!现在一切都完美加载。没有必要回到早期版本的 Visual Studio,它似乎与 Windows 操作系统有关。

@SpeedOfSpin:非常感谢!:)

问题 1 更新 今天有一个新的更新 KB5004476,我在这里看不到以前的 KB5003637。KB5004476 导致了同样的错误。安装后,我收到完全相同的错误“无法加载资源:net::ERR_HTTP2_PROTOCOL_ERROR”,卸载立即再次解决。我问微软论坛这里发生了什么:https : //answers.microsoft.com/en-us/windows/forum/windows_10-networking/kb5003637-and-the-new-kb5004476-gives-error-failed/ db2f2f73-7f5c-477a-b212-5f13c998a09a

问题 2 更新 由于他们无法在第一个 MS 论坛(上一个链接)中提供解决方案,因此这里提出了同样的问题:https : //docs.microsoft.com/en-us/answers/questions/440339/ kb5003637-and-the-new-kb5004476-gives-error-34fail.html 将 Visual Studio 更新到版本 16.10.2。也不能解决问题。

问题 3 更新 经过更多测试,它似乎只影响 Chrome 浏览器(因为我只使用 Chrome,就像大多数人一样)。在 Firefox、Edge 和 IE 中,我似乎没有这个问题。当我尝试了很多事情时,这很令人困惑,我仍然拥有的唯一解决方案是卸载 KB5003637 或新版本 KB5004476。所以我想 Chrome 毕竟有问题。现在,我将保持卸载更新,我不想更改我的首选浏览器。

问题 4 更新 这确实不是 Chrome 独有的问题,抱歉各位。今天早上在 Edge 中也看到了同样的错误。重新创建问题需要很长时间,而在 Chrome 中我每次都遇到它。:(

问题 5 的更新 正如 ChrisP 在此处的第一篇文章中所问的,如果您也遇到此问题,请转到 VS 开发人员社区,并请对此问题点赞。我也在那里问了这个问题,但此时仍然没有可靠的解决方案。

https://developercommunity.visualstudio.com/t/Failed-to-load-resource:-net::ERR_HTTP2_/1446262

问题 6 更新 两天前,在 1 次单次刷新 (F5) 后,在测试我的 Web 应用程序时,除了 HTTP/2 错误之外,我还遇到了人们开始提到的相同的蓝屏。它在文件“HTTP.sys”中显示错误“系统线程异常未处理”并重新启动,太神奇了!

在此处输入图片说明

此外,安装了 2 个新的更新 KB5003690 和 KB5003537,但没有任何改变,我仍然有烦人的错误。以前的更新 KB5003637 和 KB5004476,从那里开始出错,在这里消失了。

卸载这些更新作为解决方法对我来说并不是最好的解决方案,因为在想要更新 Windows 10 时会重新安装它们(不再有排除/隐藏更新的选项)。

对我来说,目前最简单/最快的解决方法是在本地测试,没有“加载资源失败:net::ERR_HTTP2_PROTOCOL_ERROR”错误,没有“系统线程异常未处理”BSoD!错误,最重要的是不再有压力:),正在 Visual Studio 中项目的调试设置中禁用 SSL。(右键单击下面的项目、属性、调试、Web 服务器设置)。

希望这能尽快解决!

问题 7 更新(已解决!) 微软终于发布了一个对我有用的修复程序,更多信息在这里(最后一篇文章):https : //developercommunity.visualstudio.com/t/Failed-to-load-resource : -net:: ERR_HTTP2_/1446262?viewtype=all

安装最新的更新 KB5004237 解决了我的问题。不再有“无法加载资源:net::ERR_HTTP2_PROTOCOL_ERROR”错误,也不再有“系统线程异常未处理”错误!

在我的情况下不正确,这不仅是 Chrome 问题。我已经在 Chrome、Edge、Firefox 和 IE 中尝试过,无论如何都得到完全相同的错误。
2021-05-31 19:20:51
与 7 月安全更新 KB5004945 相同的问题:( 我之前卸载了解决问题的 6 月更新 KB5003637,但在安装 7 月更新后看到相同的症状。
2021-05-31 19:20:51
我卸载了 KB5003637,但问题仍然存在。最终按照@speedofspin 的建议将项目转换为 .NET 5,现在它可以工作了。但是,我在刷新浏览器后确实看到了一次错误,因此某些内容并非 100% 正确。
2021-06-10 19:20:51
这很有帮助,因为我遇到了同样的问题。感谢您发布此信息。
2021-06-14 19:20:51
这应该被标记为正确答案。这节省了我寻找其他错误的时间。谢谢!
2021-06-15 19:20:51

我尝试了一切,包括回滚更新和完全重新安装 Windows。最后,微软支持代表发布了一个解决方法,包括禁用 HTTP2这对我来说似乎是一种临时解决方案。总之:

  1. 启动 Windows 注册表编辑器
  2. 导航到注册表项 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters
  3. 将 2 个新的 REG_DWORD 值EnableHttp2TlsEnableHttp2Cleartext, 添加到此注册表项
  4. 将两个值都设置为 0
  5. 重启机器

该代表指出:

注册表值禁用机器上的 HTTP/2。您可以在发布 https.sys 修复程序时删除这些值。

我们只在安装了 KB5003637 的机器上遇到了同样的问题。我们卸载了它,一切都很好。我们最终决定升级到 .net 5,这解决了这个问题,因为这对我们的项目来说相当轻松。

如果您无法升级,请尝试禁用 HTTP/2

serverOptions.ConfigureEndpointDefaults(lo => lo.Protocols = Microsoft.AspNetCore.Server.Kestrel.Core.HttpProtocols.Http1);

我的 .net core 3.1 看起来像这样

public static IHostBuilder CreateWebHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.ConfigureKestrel(serverOptions =>
                    {
                        serverOptions.Limits.MaxRequestBodySize = int.MaxValue;
                        serverOptions.Limits.MinResponseDataRate = null;
                        serverOptions.ConfigureEndpointDefaults(lo => lo.Protocols = Microsoft.AspNetCore.Server.Kestrel.Core.HttpProtocols.Http1);
                    })
                    .UseStartup<Startup>();
                });
        }
@speedofsping 还尝试卸载 KB5003637,但没有成功。最后,将项目升级到 .NET 5,现在可以工作了。
2021-06-02 19:20:51
@speedofspin 即使将上面的代码添加到 Program.cs 后,我也会遇到相同的错误
2021-06-03 19:20:51
我希望这会对我的情况产生任何影响,但它没有 - 请求仍然以 HTTP/2 的形式发出,并且 ERR_HTTP2_PROTOCOL_ERROR 错误仍然存​​在。
2021-06-08 19:20:51

从项目属性中禁用 SSL,它会自动降到 http/1,然后为浏览器启用 javascript 调试器

希望这会有所帮助

我发现禁用 SSL(我认为这会导致 IIS Express 降到 HTTP 1.1)是一种解决方法。

不幸的是,这不是一个选项,因为该站点被配置为使用 SSL。谢谢你的想法。
2021-05-29 19:20:51