从documentation中可以看出
对于服务器请求,请求正文始终为非空,但在没有正文时将立即返回EOF。
对于ContentLength,文档说明
对于客户端请求,如果Body不为nil,则值0表示unknown。
那么检查ContentLength是否更好呢
r *http.Request
if r.ContentLength == 0 {
//empty body
}
或检查EOF
type Input struct {
Name *string `json:"name"`
}
input := new(Input)
if err := json.NewDecoder(r.Body).Decode(input); err.Error() == "EOF" {
//empty body
}
3条答案
按热度按时间oug3syen1#
你总是需要阅读主体来知道内容是什么。客户端可以发送没有
Content-Length
的块编码的主体,或者它甚至可能有一个错误,发送一个Content-Length
而没有主体。客户端从来没有义务发送它所说的要发送的东西。如果只检查空的主体,
EOF
检查可以工作,但是除了EOF
字符串之外,我还将检查其他错误情况。您也可以在解组之前读取整个主体:
或者担心数据太多
kd3sttzy2#
vzgqcmou3#
最简单的方法