有没有遇到golang1.8 Post数据,不合法返回Connection reset by peer的问题

逻辑大概是这样的:
向webserver POST一段10.1MB的数据,先校验数据是不是大于10MB,这时候校验不通过会返回给client 400错误,同时有个errBody返回给client。
golang1.3没问题,升级到golang1.8,client收到了Contention reset by peer。errBody不完整,感觉是server端发了400后就断开连接了。

有没有大神遇到过这样的问题

共 1 个回复


xueliufeng

RST是未读完上传的数据直接关闭socket产生的。
1.3的版本 在close之前会尝试读完 req body
1.8的版本 为了防攻击快速关闭,设定了一个读取阈值
// maxPostHandlerReadBytes is the max number of Request.Body bytes not
// consumed by a handler that the server will read from the client
// in order to keep a connection alive. If there are more bytes than
// this then the server to be paranoid instead sends a “Connection:
// close” response.
//
// This number is approximately what a typical machine’s TCP buffer
// size is anyway. (if we have the bytes on the machine, we might as
// well read them)
const maxPostHandlerReadBytes = 256 << 10
可以尝试修改这个常量

# 0