设置静态标头,避免分配?

dvd*_*plm 2 go http-headers

我正在尝试编写一个对性能敏感的Go http处理程序(特别是我希望最小化使用的RAM量).处理程序为每个请求设置一堆标头.所有标题始终相同且具有相同的值.有没有办法const为所有标题使用单个并在一次调用中设置它们?

例.而不是为所有请求执行此操作:

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

......做这样的事情:

const staticHeaders = `

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

w.Headers.WriteRaw(staticHeaders)
Run Code Online (Sandbox Code Playgroud)

那可能吗?

Jim*_*imB 6

可以劫持连接,并直接编写标头,但这只会节省一半的标头分配,因为传入的请求仍然会分配一个映射和字符串来填充Request结构.这也意味着从那时起你需要自己处理原始TCP连接.

您应该彻底剖析以确保标头分配实际上是您的应用程序的瓶颈.http请求的开销远远超过标头.

您也可以尝试其他的http堆栈,例如github.com/valyala/fasthttp,尽量减少分配.