在http2中,如果client忽略了server的setting frame,server怎么办?

In http2, if the client ignores the server's settings frame, what should the server do?

当有很多连接时,我们想通过设置框架中的SETTINGS_HEADER_TABLE_SIZE来减小动态table的大小。如果客户端忽略设置帧,并且不发送带有 ack 标志 的设置帧,服务器是否会使用默认值(4096 个八位字节)?如果是这样,客户端可以发送许多收到服务器设置帧后,使用 4096 个八位字节动态 table 请求。这可能会导致服务器的内存被占用太多much.How如何避免这种情况?

客户端must及时应用设置并返回设置确认,这不是可选的。客户端的任何其他行为都是 non-compliant,在这些情况下,服务器可以关闭连接。对于客户端在没有确认设置的情况下逗留太久的特定情况,服务器可以使用原因 SETTINGS_TIMEOUT 的 GoAway 帧关闭连接。

另一件事是 HPACK 动态 table 对于 HTTP/2 连接是 "global"。因此,攻击者真正滥用默认大小的唯一方法是打开许多不同的连接,而不是在同一连接上发出许多请求。在我看来,您总是希望限制来自单个 IP 地址的连接数,否则攻击者甚至不需要僵尸网络就可以对您的服务器执行 DDOS 攻击。

将动态 table 的大小减少到 4096 字节以下可能会增加 headers 流量,并且可能 counter-productive 提高性能。