{"record":{"id":"51e34871b540a187","repo":"valyala/fasthttp","slug":"error-when-reading-response-headers-w","errorCode":null,"errorMessage":"error when reading response headers: %w","messagePattern":"error when reading response headers: %w","errorType":"exception","errorClass":"ErrSmallBuffer","httpStatus":null,"severity":"error","filePath":"header.go","lineNumber":2206,"sourceCode":"\tif len(b) == 0 {\n\t\t// Return ErrTimeout on any timeout.\n\t\tif x, ok := err.(interface{ Timeout() bool }); ok && x.Timeout() {\n\t\t\treturn ErrTimeout\n\t\t}\n\t\t// treat all other errors on the first byte read as EOF\n\t\tif n == 1 || err == io.EOF {\n\t\t\treturn io.EOF\n\t\t}\n\n\t\t// This is for go 1.6 bug. See https://github.com/golang/go/issues/14121 .\n\t\tif err == bufio.ErrBufferFull {\n\t\t\tif h.secureErrorLogMessage {\n\t\t\t\treturn &ErrSmallBuffer{\n\t\t\t\t\terror: ErrReadingResponseHeaders,\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn &ErrSmallBuffer{\n\t\t\t\terror: fmt.Errorf(\"error when reading response headers: %w\", ErrSmallReadBuffer),\n\t\t\t}\n\t\t}\n\n\t\treturn fmt.Errorf(\"error when reading response headers: %w\", err)\n\t}\n\tb = mustPeekBuffered(r)\n\theadersLen, errParse := h.parse(b)\n\tif errParse != nil {\n\t\treturn headerError(\"response\", err, errParse, b, h.secureErrorLogMessage)\n\t}\n\tmustDiscard(r, headersLen)\n\treturn nil\n}\n\n// ReadTrailer reads response trailer header from r.\n//\n// io.EOF is returned if r is closed before reading the first byte.\nfunc (h *header) ReadTrailer(r *bufio.Reader) error {","sourceCodeStart":2188,"sourceCodeEnd":2224,"githubUrl":"https://github.com/valyala/fasthttp/blob/c96f600972c6f4a7a30d664257b340ebe9d60124/header.go#L2188-L2224","documentation":"ReadHeader (response) failed while reading bytes from the connection reader. If the underlying error is a small-buffer/small-read condition, fasthttp wraps ErrSmallReadBuffer into an ErrSmallBuffer explaining that response headers could not be read within the buffer limits.","triggerScenarios":"ClientResponse / HostClient reading a server response when the header buffer is too small: response headers exceed the buffer size and ReadBufferSize is too small, or a partial read occurred.","commonSituations":"Server sending unusually large response headers (huge Set-Cookie lists) while Client.ReadBufferSize is small; proxies adding headers; misconfigured client buffers.","solutions":["Increase Client.ReadBufferSize (e.g. to 64KB+)","Reduce the size of response headers sent by the backend","If using ErrSmallBuffer handling, treat it as a buffer-size problem, not a network failure","Check intermediate proxies that may inject headers"],"exampleFix":"// before\nclient := &fasthttp.Client{ReadBufferSize: 4096}\n// after\nclient := &fasthttp.Client{ReadBufferSize: 65536}","handlingStrategy":"retry","validationCode":"// estimate header size; set client.ReadBufferSize >= max expected headers","typeGuard":"func isErrSmallBuffer(err error) bool { var e *fasthttp.ErrSmallBuffer; return errors.As(err, &e) }","tryCatchPattern":"if err := client.Do(req, resp); err != nil { if isErrSmallBuffer(err) { client.ReadBufferSize *= 4; retry() } }","preventionTips":["Set generous Client.ReadBufferSize (default 4096 may be small)","Keep response headers lean","Treat ErrSmallBuffer as config issue, not network retry issue"],"tags":["network","fasthttp","headers","buffer-size"],"backgroundTag":"header-read-failed","analyzedSha":"c96f600972c6f4a7a30d664257b340ebe9d60124","analyzedAt":"2026-08-31T22:48:28.265Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}