Security 在golang中是否缓冲了http.Request.Body?

Security 在golang中是否缓冲了http.Request.Body?,security,http,go,Security,Http,Go,我正在用Go编写一个web应用程序。我有一个http.Handler,它做一些事情并编写响应 func (h *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { // do some stuff } 到目前为止,我没有在POST和GET请求之间做任何不同的事情,这在通常情况下很好 但是帖子有一个请求。Body 这篇文章的数据会发生什么变化?你去吗?是立即调用我的处理程序,还是等到POST完全接收后再调用 为了

我正在用Go编写一个web应用程序。我有一个http.Handler,它做一些事情并编写响应

func (h *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    // do some stuff
}
到目前为止,我没有在POST和GET请求之间做任何不同的事情,这在通常情况下很好

但是帖子有一个
请求。Body

这篇文章的数据会发生什么变化?你去吗?是立即调用我的处理程序,还是等到POST完全接收后再调用


为了提供一些上下文,我特别关注一次攻击


我知道go的每连接开销非常低,但是发布大量数据又如何呢?如果我发布9Mb的数据,然后一次填空一个字节,那该如何处理呢?它在内存中缓冲了9Mb吗?如果我做10000个这样的请求,可能会有90Gb的缓冲POST数据。我的服务器不太喜欢这样做。

涉及到一些缓冲,但是处理程序会立即被调用,由您来读取request.Body


至于慢速客户端的资源消耗,特别是像slowloris这样的攻击,最简单的解决方案是在服务器上设置一个。因此,如果我不处理request.Body(像我的幼稚处理程序)并开始编写响应,是否会丢弃这些request.Body字节?我认为在开始写回TCP连接之前,需要读取整个请求。不,当缓冲区填满时,客户端会被阻塞,TCP背压会阻止它们发送更多请求。go服务器会很乐意立即为您编写响应,但大多数客户端不会同时读取响应,并且在尝试发送时也不会看到响应。如果你期待一具尸体,如果你想让客户得到回应,你应该阅读它。谢谢,我认为这很有帮助。如果没有ReadTimeout,一切都是死锁?客户端等待服务器接收,服务器等待客户端接收?服务器在某个地方有几个kB的缓冲区?如果您的响应足够大,可能会有。在两侧的缓冲io和tcp缓冲区之间,将立即发送简单响应。