我在jetty上的服务器为API服务。一些请求返回200,但对同一端点的其他请求使用不同的参数返回:
(failed)net::ERR_HTTP2_PROTOCOL_ERROR
它只出现在Chrome中。在FF中,它工作得很好。
你知道可能是什么原因以及如何修复它吗?
发布于 2021-06-07 16:55:53
您应该查看Jetty服务器调试日志以获取更多信息,或者在此处报告它们以供分析。
出现这些错误的一个原因可能是Jetty使用参数jetty.http2.rateControl.maxEventsPerSecond
来防御these vulnerabilities,该参数的默认值为20。
不同的浏览器会向服务器发送不同的帧,特别是Chrome会向服务器发送大量的PRIORITY
帧,对于资源较多的页面,可能会触发maxEventsPerSecond=20
阈值。
您可能希望将此参数配置为更高的值,例如50
,并查看错误是否仍然发生。
如果您使用的是Jetty embedded,则需要使用类似如下的代码:
HTTP2ServerConnectionFactory http2 = ...;
http2.setRateControlFactory(endPoint -> new WindowRateControl.Factory(50));
发布于 2021-06-15 01:02:06
当我遇到这个错误时,我还以为它只在Chrome中出现--当我试了几次FF时,它似乎还能工作。但是更多的几次揭示了FF和Chrome一样的随机性。
有一些关于here的讨论。
你可能想检查一下你的Windows Update是否没有拉出KB5003637,这可能会导致这个问题。我的队友确实卸载了那个补丁,并为他修复了这个补丁。
https://stackoverflow.com/questions/67867901
复制相似问题