2013-10-05 5 views
1

Я пишу простой HTTP-клиент в .NET для учебных целей. Я использую класс .NET Socket, который в конечном итоге использует Winsock. Я не хочу использовать классы WebRequest, HttpWebRequest или HttpClient, так как они используют WinINet, что я не хочу использовать, поскольку я делаю это для своего собственного понимания того, как работает HTTP.Когда ответ HTTP завершен?

Мне интересно, как определить, когда ответ HTTP завершен. Читая спецификацию HTTP/1.1 (RFC 2616), я думаю, что следующий псевдокод - это способ определения ответа HTTP-ответа.

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 

Это более или менее правильный подход?

+0

возможно дубликат [Конец НТТР Response] (http://stackoverflow.com/questions/17515565/end-of -an-http-response) – CodeCaster

+1

См. RFC 2616 §4.4 (http://tools.ietf.org/html/rfc2616#section-4.4) для рассмотрения большего числа случаев. – cubetwo1729

ответ

0

Ваше понимание в основном правильно, с некоторыми незначительными поправками, за RFC 2616 Section 4.4:

Read and parse HTTP headers 
if not successful: 
    throw error 
if response can contain message body: 
    if HTTP version is 1.1+ and Transfer-encoding is not identity: 
     while true: 
      read line, extract delimited ASCII hexadecimal, the chunk size 
      if not successful: 
       throw error 
      if chunk size is 0: 
       break while loop 
      read chunk size number of bytes 
     read and parse trailing HTTP headers 
    else if Content-Length is specified: 
     read Content-Length number of bytes 
    else if Content-Type is "multipart/byteranges": 
     read and parse MIME-encoded chunks until terminating MIME boundary is reached 
    else: 
     read until connection is closed 
Смежные вопросы