我正在使用 net/http 包在 GO 中编写一个小型实验性 http 服务器,我需要所有回复都具有“身份”传输编码。然而,GO 中的 http 服务器总是使用“分块”传输返回响应。有没有办法在 GO 中禁用 HTTP 服务器上的分块编码?
问问题
9459 次
1 回答
2
我不清楚在规范下使用“Transfer-Encoding:identity”响应是否有效(我想也许你应该把它排除在外),但是......
检查这里的代码,我在 WriteHeader(code int) 函数中看到了这一点(这有点奇怪,但这个函数实际上将所有标头刷新到套接字):
367 } else if hasCL {
368 w.contentLength = contentLength
369 w.header.Del("Transfer-Encoding")
370 } else if w.req.ProtoAtLeast(1, 1) {
371 // HTTP/1.1 or greater: use chunked transfer encoding
372 // to avoid closing the connection at EOF.
373 // TODO: this blows away any custom or stacked Transfer-Encoding they
374 // might have set. Deal with that as need arises once we have a valid
375 // use case.
376 w.chunking = true
377 w.header.Set("Transfer-Encoding", "chunked")
378 } else {
我相信上面第一行中的“hasCL”是指有可用的内容长度。如果可用,则完全删除“Transfer-Encoding”标头,否则,如果版本为 1.1 或更高版本,则将“Transfer-Encoding”设置为分块。因为这是在将其写入套接字之前完成的,所以我认为您目前没有任何方法可以更改它。
于 2013-01-14T21:50:17.810 回答