【问题标题】:"Failed to load resource: net::ERR_HTTP2_PROTOCOL_ERROR" for React app after upgrading to Visual Studio 2019 16.10.0升级到 Visual Studio 2019 16.10.0 后 React 应用的“加载资源失败:net::ERR_HTTP2_PROTOCOL_ERROR”
【发布时间】:2021-08-26 21:30:15
【问题描述】:

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

首页为空白,在Chrome(版本91.0.4472.77(正式版)(64位))调试器控制台中显示如下错误

“加载资源失败:net::ERR_HTTP2_PROTOCOL_ERROR”

解决方案包括:

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

我尝试了以下方法:

  • 清理和重建解决方案
  • 清除浏览器缓存
  • 卸载并重新安装 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

【问题讨论】:

  • 您是否安装了 KB5003637 Windows 更新。如果你卸载它。
  • @SpeedOfSpin 已卸载 KB5003637,同样的问题仍然存在。
  • HTTP.sys 上出现随机蓝屏错误 SYSTEM_THREAD_EXCEPTION_NOT_HANDLED

标签: reactjs visual-studio .net-core


【解决方案1】:

这个错误也让我发疯了。 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”中显示错误“System Thread Exception not Handled”并重新启动,太棒了!

另外,安装了 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”错误,也没有更多“系统线程异常未处理”错误!

【讨论】:

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

我尝试了所有方法,包括回滚更新和完全重新安装 Windows。最后,Microsoft 支持代表为此发布了一个解决方法,其中涉及disabling HTTP2。这似乎对我来说是一个临时解决方案。总结:

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

代表备注:

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

【讨论】:

    【解决方案3】:

    我们只在安装了 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>();
                    });
            }
    

    【讨论】:

    • 我希望这会对我的情况产生任何影响,但它没有 - 仍然以 HTTP/2 的形式发出请求,并且 ERR_HTTP2_PROTOCOL_ERROR 错误仍然存​​在。
    • @speedofspin 即使将上面的代码添加到 Program.cs 后,我也会遇到同样的错误
    • @speedofsping 还尝试卸载不起作用的 KB5003637。最后,将项目升级到 .NET 5,它现在可以工作了。
    【解决方案4】:

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

    希望这会有所帮助

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 不幸的是,这不是一个选项,因为该站点被配置为使用 SSL。谢谢你的想法。
      【解决方案6】:

      仅在安装了 KB5003637 的操作系统上出现此问题(在 iis express 上)。 如果您无法删除此更新,请先将 Windows 10 升级到最后 https://www.microsoft.com/en-ca/software-download/windows10 那么你可以删除kb5003637

      (别忘了禁用 Windows 自动更新)

      【讨论】:

      • 这对我不起作用,更新到 KB 消失的最新窗口后,无法卸载它。甚至尝试手动应用它然后尝试卸载它,但它说该版本的 Windows 不支持 KB
      【解决方案7】:

      我在创建新的 blazor 应用程序 vs2019/windows10 更新到最新版本时遇到此错误。 在查看了之前工作的 blazor 项目 Startup.cs 之后,我通过注释掉 //app.UseHttpsRedirection(); 来修复它。 我认为这可能是一个新的项目模板问题

      【讨论】:

        【解决方案8】:

        就我而言,将项目升级到 .Net core 5.0(如 @SpeedofSpin 建议的那样)没有帮助 - 我遇到了同样的问题。

        为应用程序禁用 SSL(如 @samejeep 建议的那样)要求很高,因为我的项目使用 IdentityServer4,之后它就停止了身份验证 - 所以我没有继续这条路。

        但作为一种解决方法,我已通过非 SSL http:// 请求更改了对 css、js 和静态文件的所有请求。

        例如,而不是这个

        <link rel="stylesheet" href="~/css/site.css">
        

        哪个会使用当前请求的协议 https://,我使用的是绝对路径,例如:

        <link rel="stylesheet" href="http://localhost/css/site.css">
        

        请注意,我明确指出“http”(而不是“https”)。

        我为 css 样式和 js 脚本做了这些,这对我来说已经足够了。 不过,我不必为图像这样做。

        对我来说,这只是一个肮脏的解决方法(我将等待 MS 发布补丁),但至少它可以让我继续工作。

        更新

        我在本地主机上找到了disable HTTP/2 via registry 的更好方法,这也解决了问题。

        【讨论】:

          【解决方案9】:

          在我的情况下,是 ASP.NET Core Identity 导致了问题:我有太多角色(用户声明),它们作为会话 cookie 存储在我的浏览器中并导致“HTTP 400 错误请求 - 请求标头太长”错误。这在 Chrome 中显示为 HTTP2 协议错误,在 Firefox 中显示为 SSL 证书错误,因为我使用的是 HTTPS 重定向。

          【讨论】:

            猜你喜欢
            • 2021-08-15
            • 1970-01-01
            • 2022-12-13
            • 1970-01-01
            • 1970-01-01
            • 2014-06-24
            • 2018-10-10
            • 2014-07-06
            • 2015-08-17
            相关资源
            最近更新 更多