设置静态headers,避免分配?

Set static headers, avoid allocation?

我正在尝试编写一个对性能敏感的 Go http 处理程序(特别是我想尽量减少使用的 RAM 量)。处理程序为每个请求设置一堆 headers。所有 headers 始终相同且具有相同的值。 有没有办法对所有 headers 使用单个 const 并在一次调用中设置它们?

例子。而不是对所有请求都这样做:

w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")

…做这样的事情:

const staticHeaders = `

Access-Control-Allow-Origin: *
Cache-Control: no-cache
Connection: keep-alive`

w.Headers.WriteRaw(staticHeaders)

这可能吗?

可以 劫持连接,并直接写入 header,但这只会为你节省一半的 header 分配,因为传入request 仍然会分配一个 map 和 strings 来填充 Request 结构。这也意味着您需要从那时起自己处理原始 TCP 连接。

您应该彻底分析以确保 header 分配实际上是您应用程序的瓶颈。 http 请求的开销比 headers 多得多。

您还可以尝试其他 http 堆栈,例如 github.com/valyala/fasthttp,它们力求最大限度地减少分配。