【发布时间】:2015-02-11 16:57:46
【问题描述】:
我正在用 Go 编写一个网络应用程序。我有一个 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 的每个连接开销非常低,但是 POST 大量数据呢?如果我发布 9Mb 的数据,然后一次勺喂 1 个字节,那么如何处理呢?它是否缓冲了内存中的 9Mb?如果我做 10,000 个这样的请求,那可能是 90Gb 的缓冲 POST 数据。我的服务器不会很喜欢这样。
【问题讨论】: