我有一台net/http服务器提供GET请求(通过ServeHTTP()),这可能需要很长时间才能完成.因此,服务器端没有配置客户端超时.但是,连接的客户端可能已关闭其与服务器的连接(通常由于其侧面的超时,但当然,其他原因也是可能的).我无法控制客户.
如何在ServeHTTP()不"干扰"连接的情况下检测到这种情况?
1xx响应头,因为它不受支持ResponseWriter.WriteHeader()(同样,它只允许设置一个头并且不返回任何内容).ResponseWriter.Write()零大小的数据,因为它会发送标题.我还有其他选择吗?
编辑:这不是如何过早关闭/中止Golang http.Client POST的重复,因为问题是如何从客户端取消请求,而我的问题是从服务器端检测这样的取消.
询问请求上下文:
对于传入服务器请求,当客户端连接关闭,请求被取消(使用HTTP/2)或ServeHTTP方法返回时,将取消上下文.
var r *http.Request
select {
case <-r.Context().Done():
// Client gave up
default:
}
Run Code Online (Sandbox Code Playgroud)