慢速HTTP与Web套接字-资源利用率



如果到服务器的一堆"慢速HTTP"连接会消耗大量资源,从而导致拒绝服务,那么为什么到服务器的一群web套接字不会导致同样的问题呢?

另一个SO问题的公认答案是,保持空闲连接几乎是免费的。

如果维护开放的TCP连接不需要任何费用,为什么"慢速HTTP"会导致拒绝服务?

WebSocket和"慢速"HTTP连接都使用开放连接。不同之处在于对服务器设计的期望。

典型的HTTP服务器不需要处理大量的开放连接,并且是围绕开放连接数量较少的假设进行设计的。如果服务器不能抵御速度较慢的客户端,那么攻击者可以强制根据此假设设计的服务器达到资源限制。

以下是几个例子,展示了不同的期望如何影响设计:

  • 如果一次只有几个HTTP请求在运行,那么每个连接使用一个线程是可以的。对于WebSocket服务器来说,这不是一个好的设计。

  • 默认的文件描述符限制通常适用于典型的HTTP场景,但不适用于大量连接。

可以设计一个HTTP服务器来处理大量打开的连接,并且有几个服务器可以开箱即用。

最新更新