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 でメッセージを送信するのは奇妙に思えます。