代码之家  ›  专栏  ›  技术社区  ›  homelesser

在http2中,如果客户端忽略服务器的设置框,服务器应该怎么做?

  •  1
  • homelesser  · 技术社区  · 9 年前

    当有很多连接时,我们希望通过 SETTINGS_HEADER_TABLE_SIZE 在设置框中。如果客户端忽略设置帧,并且没有发送带有 ack标志 ,服务器将使用默认值(4096个八位字节)吗?如果是这样的话,客户端可以在接收到服务器设置帧之后使用4096个八位字节动态表发送许多请求。这可能会导致服务器内存使用过多。如何避免这种情况?

    1 回复  |  直到 5 年前
        1
  •  1
  •   dsign    9 年前

    客户 must 迅速应用设置并发送回设置确认,这不是可选的。来自客户端的任何其他行为都是不兼容的,在这些情况下,服务器可以关闭连接。对于客户端在没有确认设置的情况下停留太久的特定情况,服务器可以使用GoAway帧关闭连接,原因是SETTINGS_TIMEOUT。

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

    将动态表的大小减小到4096字节以下可能会增加标头流量,并且可能会对性能产生负面影响。