簡単な質問 - HTTP 応答のステータス行の最大サイズはありますか?
RFC では、この情報を見つけることができませんでした。次のようなものです。
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
これによると、次のように推測できます。
- HTTP バージョンは通常 8 バイトです (例
HTTP/1.1
) - ステータス コードは 3 バイトです
- 2 スペース + CRLF は 4 バイト
- Reason-Phrase -> RFC によると最長は
Requested range not satisfiable
31 バイト
これは合計 46 バイトになります。
この仮定は正しいですか、それとも何か見逃しましたか?
アップデート:
以下の回答により、私の問題を少しだけ特定したいと思います。
サーバーからの TCP メッセージを含むある種のログ ファイルを解析しています。今、私が気にしないランダムなデータと、読みたいHTTPメッセージがいくつかあります。取得したすべてのデータを解析して\r\n
、ステータス ラインを見つけます。ヘッダーがいくつかの TCP パッケージに分割されていると仮定する必要があるため、すべてのデータをバッファリングして解析します。
ヘッダー ステータス ラインの最大サイズがない場合は、次に\r\n
発生するまですべてのデータをバッファリングする必要があります。最悪の場合、これはランダム データを数キロバイト単位で保存することを意味します。これは、ヘッダー ステータス ラインの一部になる可能性があるためです (おそらくそうではないでしょう)。
それとも、この場合、CRLF の代わりに HTTP バージョン文字列を解析するのが適切でしょうか?