【问题标题】:Disable chunked encoding for HTTP server responses禁用 HTTP 服务器响应的分块编码
【发布时间】:2013-01-14 08:39:01
【问题描述】:

我正在使用 net/http 包在 GO 中编写一个小型实验性 http 服务器,我需要我的所有回复都具有“身份”传输编码。然而,GO 中的 http 服务器总是使用“分块”传输返回响应。 有什么方法可以在 GO 中禁用 HTTP 服务器上的分块编码?

【问题讨论】:

标签: http encoding go


【解决方案1】:

我不清楚使用“Transfer-Encoding: identity”响应在规范下是否有效(我认为也许你应该把它排除在外),但是......

检查代码here,我在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”设置为分块。因为这是在将其写入套接字之前完成的,所以我认为您目前没有任何方法可以更改它。

【讨论】:

  • 添加 Content-Length 可以解决问题。 (我在那个标题中有错字)。谢谢!
  • 但是如果你不知道内容长度怎么办?
  • @Timmmm 那么没有人应该与您的客户端/代理交谈,因为它的设计很糟糕,无法遵循 HTTP2 删除的 HTTP1.1 有问题的部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-13
  • 2018-02-23
  • 2012-03-10
  • 1970-01-01
  • 1970-01-01
  • 2018-07-12
相关资源
最近更新 更多