docs(middleware): note the full-duplex body drain limit of the inactivity timeout
- commit
- 25655269805e90b7d8ab2d10f666776fe2db2d4d
- author
- brice · · 2026-10-16 19:29 UTC
- parent
- 2a5c221
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email - refs
- feat/configurable-http-timeouts
1 file · +5 -2
M internal/adapters/in/http/middleware/transfer_idle.go +5 -2
| @@ -52,8 +52,11 @@ const idleWriteChunk = 8 * 1024 | |||
| 52 | 52 | // into the next request. The timer never touches the controller after return. | |
| 53 | 53 | // | |
| 54 | 54 | // Limits: a handler that ignores the canceled context and never touches the | |
| 55 | - | // connection again keeps its HTTP/1 connection until it returns. A non-positive | |
| 56 | - | // idle disables the middleware. | |
| 55 | + | // connection again keeps its HTTP/1 connection until it returns. A handler that | |
| 56 | + | // enables HTTP/1 full-duplex mode (ResponseController.EnableFullDuplex) is not | |
| 57 | + | // covered for the unread-body drain: net/http clears the read deadline before | |
| 58 | + | // that drain, so such a handler must consume or bound its request body itself. | |
| 59 | + | // A non-positive idle disables the middleware. | |
| 57 | 60 | func TransferIdleTimeout(idle time.Duration) func(http.Handler) http.Handler { | |
| 58 | 61 | return func(next http.Handler) http.Handler { | |
| 59 | 62 | if idle <= 0 { | |
| @@ -52,8 +52,11 @@ const idleWriteChunk = 8 * 1024 | |||||
| 52 | // into the next request. The timer never touches the controller after return. | 52 | // into the next request. The timer never touches the controller after return. | ||
| 53 | // | 53 | // | ||
| 54 | // Limits: a handler that ignores the canceled context and never touches the | 54 | // Limits: a handler that ignores the canceled context and never touches the | ||
| 55 | - | // connection again keeps its HTTP/1 connection until it returns. A non-positive | 55 | + | // connection again keeps its HTTP/1 connection until it returns. A handler that |
| 56 | - | // idle disables the middleware. | 56 | + | // enables HTTP/1 full-duplex mode (ResponseController.EnableFullDuplex) is not |
| 57 | + | // covered for the unread-body drain: net/http clears the read deadline before | |||
| 58 | + | // that drain, so such a handler must consume or bound its request body itself. | |||
| 59 | + | // A non-positive idle disables the middleware. | |||
| 57 | func TransferIdleTimeout(idle time.Duration) func(http.Handler) http.Handler { | 60 | func TransferIdleTimeout(idle time.Duration) func(http.Handler) http.Handler { | ||
| 58 | return func(next http.Handler) http.Handler { | 61 | return func(next http.Handler) http.Handler { | ||
| 59 | if idle <= 0 { | 62 | if idle <= 0 { | ||