在golang中缓冲了一个http.Request.Body吗?

时间:2014-12-12 22:03:54

标签: security http go

我在Go中编写了一个Web应用程序。我有一个http.Handler做一些东西并写一个回复。

func (h *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    // do some stuff
}

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

但是POST有一个Request.Body

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


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

我知道go的连接开销非常低,但是发布大量数据呢?如果我发布9Mb的数据,然后一次换勺1个字节,怎么办呢?它是否在内存中缓冲了9Mb?如果我做了10,000个这样的请求,那可能是90Gb的缓冲POST数据。我的服务器非常不喜欢。

1 个答案:

答案 0 :(得分:1)

涉及一些缓冲,但是立即调用处理程序,由你来阅读请求.Body。

对于慢速客户端的资源消耗以及特别是slowloris等攻击,最简单的解决方案是在服务器上设置ReadTimeout