我正在用Go编写一个Web应用程序。 我有一个http.Handler,它可以完成一些工作并编写响应。

到目前为止,我在POST和GET请求之间没有做任何不同,这在通常情况下是可以的。

但是POST具有Request.Body

该POST数据会怎样? 会缓冲吗? 是立即调用我的处理程序,还是等到完全收到POST为止?

为了提供一些背景信息,我特别关注懒猴攻击。

我知道go的每个连接开销很低,但是发布大量数据又如何呢? 如果我发布9Mb的数据,然后一次输入1个字节,如何处理呢? 它是否在内存中缓冲了9Mb? 如果我执行10,000个这样的请求,则可能是90Gb的缓冲POST数据。 我的服务器不太喜欢。

涉及一些缓冲,但是处理程序会立即被调用,这取决于您读取request.Body。

至于来自慢客户端的资源消耗,特别是诸如lowloris的攻击,最简单的解决方案是在服务器上设置ReadTimeout。