You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Golang HTTP ResponseWriter自动添加2KB阈值的Content-Length?求源码位置

找到Go HTTP响应2048字节阈值的源码位置

你贴的这段处理HTTP请求的代码:

func (handler Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    var content string
    ...
    w.Write([]byte(content))
}

你观察到的这个2048字节的阈值,根源在Go标准库net/http包的内部定义里,具体是server.go文件中的defaultBufSize常量:

const defaultBufSize = 2048

当你调用w.Write()时,HTTP包的默认响应写入器(底层是response结构体,实现了http.ResponseWriter接口)会先把内容写入这个大小为2048的缓冲区:

  • 如果写入的内容总长度≤2048,缓冲区能完全容纳,服务器会在响应结束时计算出完整的内容长度,自动添加Content-Length头,再一次性发送缓冲区里的内容;
  • 一旦内容超过2048,缓冲区会被填满并触发刷新操作,这时服务器就会自动切换到分块编码模式,添加Transfer-Encoding: chunked头,不再计算总长度,而是分块发送后续内容。

这个常量是HTTP包内部用来平衡小型响应的性能(避免分块带来的额外开销)和内存占用的默认配置。

内容的提问来源于stack exchange,提问作者zealllot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 18:20:59