Thanks all for your support. As workaround, I buffer the response until I read completely the request. In order to limit the GC and consumption of resource, I recycle the the bytes.Buffer with sync.Pool that is in charge of create bytes.Buffer with initial capacity.
Le samedi 19 juin 2021 à 12:19:11 UTC+2, Brian Candler a écrit : > Ah I get it now: it's due to application starting to send a response > before the request has been completely received, as per the response to > your ticket which links to https://github.com/golang/go/issues/15527 > > On Saturday, 19 June 2021 at 11:15:34 UTC+1 Brian Candler wrote: > >> Here is a variation on your program, removing json.Encoder from the >> equation: >> https://play.golang.org/p/ACS_n1yNJfQ >> >> It works as shown, but if you uncomment the commented-out fmt.Fprintf, it >> fails. (macOS, go1.16.5) >> >> This is indeed weird. As far as I can see, the only way MaxBytesReader >> <https://golang.org/src/net/http/request.go?s=36939:37016#L1115> >> interacts with its Writer (w) argument is to call w.requestTooLarge() if >> the limit is exceeded *and* w has that method. But I've checked and it >> doesn't. >> >> On Saturday, 19 June 2021 at 06:19:22 UTC+1 jerome....@gmail.com wrote: >> >>> I submit this issue https://github.com/golang/go/issues/46826 >>> >>> Le vendredi 18 juin 2021 à 21:15:54 UTC+2, Jérôme LAFORGE a écrit : >>> >>>> Sorry, I wasn't clear enough. >>>> I know that panic comes from my code. It throws it. >>>> But I wanted to show that error on Decode must not occur because the >>>> body is smaller than 8kB. >>>> The 2nd example works like this. >>>> The only difference between the two examples is just the response is >>>> discarded. >>>> >>>> Le vendredi 18 juin 2021 à 20:37:11 UTC+2, seank...@gmail.com a écrit : >>>> >>>>> I think it's working as expected? >>>>> The panic originates in your code: >>>>> >>>>> ``` >>>>> err := decoder.Decode(&el) >>>>> if err != nil { >>>>> panic(err) >>>>> } >>>>> ``` >>>>> >>>>> What you should be doing is to break out of the loop and handle the >>>>> error (client sending more than you want to read) gracefully >>>>> On Friday, June 18, 2021 at 4:32:11 PM UTC+2 jerome....@gmail.com >>>>> wrote: >>>>> >>>>>> Hello, >>>>>> I am facing to unexpected behavior when I want to limit the maximum >>>>>> body request and managing the request/response as streaming way. >>>>>> >>>>>> With this code https://play.golang.org/p/eN2XEpiPdhn, when I send >>>>>> the request, I have this unexpected error (whatever the max size): >>>>>> >>>>>> ``` >>>>>> 2021/06/18 15:48:49 http: panic serving 127.0.0.1:39024: http: >>>>>> invalid Read on closed Body >>>>>> goroutine 6 [running]: >>>>>> net/http.(*conn).serve.func1(0xc000110960) >>>>>> net/http/server.go:1824 +0x153 >>>>>> panic(0x671b60, 0xc000012af0) >>>>>> runtime/panic.go:971 +0x499 >>>>>> main.serve(0x713cd0, 0xc0001480e0, 0xc000164000) >>>>>> autodebit/service/order/cmd/main.go:32 +0x3b7 >>>>>> net/http.HandlerFunc.ServeHTTP(0x6d2608, 0x713cd0, 0xc0001480e0, >>>>>> 0xc000164000) >>>>>> net/http/server.go:2069 +0x44 >>>>>> net/http.serverHandler.ServeHTTP(0xc000148000, 0x713cd0, >>>>>> 0xc0001480e0, 0xc000164000) >>>>>> net/http/server.go:2887 +0xa3 >>>>>> net/http.(*conn).serve(0xc000110960, 0x714180, 0xc000028280) >>>>>> net/http/server.go:1952 +0x8cd >>>>>> created by net/http.(*Server).Serve >>>>>> net/http/server.go:3013 +0x39b >>>>>> ``` >>>>>> >>>>>> But if I discard the response (via io.Discard) that works as expected >>>>>> https://play.golang.org/p/ZOJQz6EC--V >>>>>> >>>>>> I don't understand what it is going wrong. Can I use >>>>>> http.MaxBytesReader when I send response as streaming way? >>>>>> >>>>>> Thanks for your help >>>>>> Jérôme >>>>>> >>>>>> the body file seems too big to be in attach, I put it on >>>>>> https://sharetext.me/iveuebzrfq >>>>>> the curl cmd: >>>>>> curl POST 'http://127.0.0.1:8081' --data-binary '@body.jsonl' >>>>>> >>>>>> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/1910c8cd-23ae-4634-b644-09a443e902d4n%40googlegroups.com.