1

学習目的で .NET で単純な HTTP クライアントを作成しています。最終的にWinsockを使用する .NET Socketクラスを使用しています。WebRequestHttpWebRequest、またはHttpClientクラスはWinINetを使用するため、使用したくありません。これは、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

これは多かれ少なかれ正しいアプローチですか?

4

2 に答える 2

1

RFC 2616 セクション 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
于 2013-10-06T17:26:26.997 に答える
0

http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p1-messaging-24.html#message.body.lengthを確認してください(これで質問に答えられない場合は、ワーキンググループ)。

于 2013-10-05T16:09:31.003 に答える