2013年9月9日月曜日

HTTP Message Length について

いろいろあってHTTPの仕様を調べていた。
知りたかったのは、以下のようなヘッダを持つHTTPレスポンスはプロトコル仕様上正しいのかという点。
  • Content-Length がない
  • Transfer-Encoding がない
  • Connection: close である
RFC2616を拾い読みした結果、これは仕様上正しそうだということがわかった。
該当するのは以下の記載あたり。

4.4 Message Length


The transfer-length of a message is the length of the message-body as it appears in the message; that is, after any transfer-codings have been applied. When a message-body is included with a message, the transfer-length of that body is determined by one of the following (in order of precedence):

- snip -

5.By the server closing the connection. (Closing the connection cannot be used to indicate the end of a request body, since that would leave no possibility for the server to send back a response.)

つまり、サーバーからコネクションを切るようなレスポンスであれば、その接続内のデータの末尾までがレスポンスのメッセージ長である、ということらしい。
レスポンスにはContent-LengthかあるいはTransfer-Encoding(chunked) が必須だと思っていたけどそうではなかった。