I have a net/http
Server serving a GET request (via ServeHTTP()
) which can take a very long time to complete. Consequently, no client timeout is configured server side. However, the connected client may have shut down its connection to the server (typically due to a timeout on its side, but of course, other reasons are possible as well). I have no control over the clients.
How do I detect such a condition within ServeHTTP()
without "disturbing" the connection?
- I cannot send a series of
1xx
response headers because it's not supported byResponseWriter.WriteHeader()
(also, it allows only one header to be set and does not return anything). - I cannot use
ResponseWriter.Write()
with zero-sized data, as that would send a header.
What other options do I have?
Edit: this is not a duplicate of how to close/abort a Golang http.Client POST prematurely because there the question is how to cancel a request from the client side while my question is about detecting such a cancellation from the server side.