页面加载时出现不一致的 ERR_HTTP2_SERVER_REFUSED_STREAM 错误

Sun*_*Red 10 wordpress hosting web-hosting http-error

我确实有至少两个 WordPress 网站,它们非常不一致地抛出了不同数量的net::ERR_HTTP2_SERVER_REFUSED_STREAM错误。当这些错误发生时,抛出的错误数量在不同页面加载(或重新加载)之间变化很大,从 4 个带有该错误的请求到大约 60 个,有时甚至更多(如果页面有很多请求)。实际受影响的资源/请求似乎完全是随机的,因此不会留下任何线索。

\n

如果发生这些错误,则它们的发生大多会持续存在(在进行简单页面刷新或硬刷新时),直到浏览器重新启动为止。他们甚至很少在重新启动后留下来。

\n

当这个问题确实发生并且浏览器/系统进入这种错误状态时,这些错误也会发生在 WordPress 后端加载类似的基本文件中.../wp-includes/js/wp-lists.min.js?ver=5.7

\n

至少有两名用户在 Chrome、Opera 和 Edge 中登录和退出 WordPress 时遇到过这种行为。在 Opera 和 Edge 中,我们没有安装任何浏览器扩展。据我们所知,其他用户从未遇到过此问题,尽管其中一些用户多次访问该网站。

\n

造成这种情况的原因是什么和/或解决它的方法是什么?

\n
\n

两个站点上安装的插件列表:

\n\n
\n

Luc*_*nte 10

这与 WordPress 无关。它与使用HTTP/2 标准的Apache 或 Nginx 相关

\n
\n

REFUSED_STREAM (0x7):端点在执行任何应用程序处理之前拒绝流(有关详细信息,请参阅第 8.1.4 节)。

\n
\n

它可能来自太多并发流:

\n
\n

端点不得超过其对等方设置的限制。接收导致超出其通告的并发流限制的 HEADERS 帧的端点必须将此视为 PROTOCOL_ERROR 或 REFUSED_STREAM 类型的流错误(第 5.4.2 节)。错误代码的选择决定了端点是否希望启用自动重试(详细信息请参见第 8.1.4 节)。

\n
\n

它也可以在推送响应操作期间发送:

\n
\n

如果客户端出于某种原因确定它不希望从服务器接收推送的响应,或者服务器花了太长时间才开始发送承诺的响应,则客户端可以使用 CANCEL 或 REFUSED_STREAM 发送 RST_STREAM 帧代码并引用推送流的标识符。

\n
\n

或者,如果客户端尝试使用 HTTP/1.1 进行连接:

\n
\n

不希望处理 HTTP/1.1 响应的服务器应在发送连接序言后立即拒绝流 1,并提供 REFUSED_STREAM 错误代码,以鼓励客户端通过升级的 HTTP/2 连接重试请求。

\n
\n

我无法确定这些请求期间发生的情况,因为它可能有多种原因,如上所述。

\n

所以我建议你几个选择:

\n
    \n
  • 通过 Cloudflare 传递您网站的流量,因此它们充当这些连接的中间人,并使发送到您服务器的请求标准化
  • \n
  • 您可以增加SETTINGS_MAX_CONCURRENT_STREAMS来最大程度地降低发送REFUSED_STREAM. 如果您使用 Nginx,您可以在此处查看如何执行此操作:http://nginx.org/en/docs/http/ngx_http_v2_module.html#http2_max_concurrent_streams
  • \n
  • 如果您不知道如何执行上述操作,请联系您的托管公司并要求他们为您执行此操作并升级您的 Nginx 版本,因为已知某些旧版本存在问题。
  • \n
  • 在 Nginx 中禁用 HTTP/2。如何在nginx中禁用http2
  • \n
  • 作为最后一个资源,您可以迁移到另一家托管公司。
  • \n
\n

如果您使用 Apache,我上面所说的一切也适用于它。

\n