2013-01-14 96 views
3

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

+1

您需要添加一个Content-Length标题; – thwd

+1

golang-nuts中的一个线程涉及这个主题:https://groups.google.com/d/topic/golang-nuts/3sYwQlUOv-o/discussion – zzzz

+1

谢谢@汤姆! Content-Length标题字符串中存在拼写错误。这固定了一切:) – Dany

回答

1

这我不清楚是否有响应“传输编码:认同”的规范下是有效的(我想,也许你应该离开它),但是...

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

+0

添加内容长度是诀窍。 (我在这个头文件中有一个错字)。谢谢! – Dany

+1

但是,如果你不知道内容的长度? – Timmmm