如果有一堆"慢HTTP"与服务器的连接可能会占用大量资源以致导致拒绝服务,为什么一堆服务器的Web套接字不会导致同样的问题呢?
a different SO question接受的答案说,保持空闲连接几乎是免费的。
如果维持一个开放的TCP连接没有任何成本,为什么一个"慢速HTTP"导致拒绝服务?
答案 0 :(得分:2)
WebSocket和“慢”HTTP连接都使用开放连接。不同之处在于对服务器设计的期望。
典型的HTTP服务器不需要处理大量的开放连接,而是围绕打开连接数量很少的假设而设计的。如果服务器无法防止慢速客户端,则攻击者可以强制围绕此假设设计的服务器达到资源限制。
以下是一些示例,展示了不同的期望如何影响设计:
如果您一次只有一些HTTP请求在飞行中,那么每个连接使用一个线程就可以了。这对于WebSocket服务器来说不是一个好的设计。
默认文件描述符限制通常适用于典型的HTTP方案,但不适用于大量连接。
可以设计一个HTTP服务器来处理大量的开放连接,而几个服务器可以开箱即用。