0

HTTP 1.1 サーバーを実装しました。これは組み込みサーバーなので、RFC の必須機能のみをサポートします。すべての応答は、チャンク エンコードされて送信されます。HEAD は必須であるため、これもサポートされています。

HEAD は本体のない GET です。したがって、サーバーは HEAD リクエストに応じて次のようなレスポンスを送信しています。

HTTP/1.1 200 OK
Server: testServer
Connection: keep-alive
Transfer-Encoding: chunked

私が疑問に思っているのは、チャンクの終わりを知らせるために必要な「0\r\n」を追加する必要があることです:

 HTTP/1.1 200 OK
 Server: testServer
 Connection: keep-alive
 Transfer-Encoding: chunked

 0

RFC で関連する部分を収集しようとしました。

「HEAD メソッドは、サーバーが応答でメッセージ本文を返してはならないことを除いて、GET と同じです。」

「HEAD リクエスト メソッドへのすべての応答には、メッセージ本文を含めてはなりません。たとえエンティティ ヘッダー フィールドが存在すると、そうであると信じ込ませる可能性があります。」

「1.「してはならない」メッセージ本文を含む応答メッセージ (1xx、204、304 応答、および HEAD 要求への応答など) は、ヘッダー フィールドの後の最初の空行で常に終了します。メッセージに存在するエンティティ ヘッダー フィールド。」

これまでのところ、最初の解決策 (0 なし) が正しいことを理解しています。しかし、チャンク スタイル 0\r\n で終わらない Transfer-encoding: chunked でメッセージを送信するのは奇妙に思えます。

4

1 に答える 1

2

記載されている問題はかなり古いため解決されていると思いますが、

最近、私はビデオをストリーミングするためのテスト用の http サーバーを開発しました。私が学んだことを他の人に役立つように公開したいと思いました。まず、「0\r\n」はチャンクの終わりのマーカーではなく、チャンクされたトレーラーは「0\r\n\r\n」です。

ヘッダーの場合、文字列は次のようになります

"HTTP/1.1 200 OK\r\n" \
"Server: testServer\r\n" \
"Connection: keep-alive\r\n" \
"Transfer-Encoding: chunked\r\n" \
"\r\n"

ヘッダーの終わりを示す最後の CRLF に注意してください。

この助けを願っています。

于 2016-11-02T04:05:40.187 に答える