I am writing a simple HTTP client in .NET for learning purposes. I am using the .NET Socket class, which ultimately uses Winsock. I do not want to use the WebRequest, HttpWebRequest, or HttpClient classes, as they use WinINet, which I do not want to use as I am doing this for my own understanding of how HTTP works.
I am wondering how to determine when an HTTP response is finished. By reading the HTTP/1.1 specification (RFC 2616), I think the following pseudocode is how to determine when an HTTP response is finished.
parse HTTP headers
if parse not successful:
throw error
if HTTP version is 1.1 and Transfer-encoding is chunked:
parse first line of each chunk as an ASCII hexadecimal, the chunk size
if parse not successful:
throw error
read each chunk until chunk size 0
else if Content-Length is specified:
read Content-Length number of bytes
else:
throw error
Is this a more-or-less correct approach?
See Question&Answers more detail:os