openssl
のSSL_read()
呼び出しのマニュアルページには次のように記載されています。
SSL_read() は、SSL/TLS レコードに基づいて機能します。データはレコード単位で受信されます (SSLv3/TLSv1 の最大レコード サイズは 16kB)。レコードが完全に受信された場合にのみ、処理できます (復号化と整合性のチェック)。したがって、SSL_read() の最後の呼び出しで取得されなかったデータは、SSL 層内で引き続きバッファリングでき、SSL_read() への次の呼び出しで取得されます。
とすれば:
- 単一の送信メッセージの HTTP ヘッダーは、常に一度に送信できます
- 単一の SSL/TLS レコードは明らかに 16KB のデータを保持できます。これは、すべてのユーザー (または少なくとも非ひねくれた HTTP 要求) にとって十分なはずです。
ブラウザーがヘッダーを複数の SSL レコードに分割する理由はほとんどありませんよね? それとも、レイテンシに関して非常に積極的なブラウザが存在するため、この種の小さなペイロードでさえ複数のレコードに分割しますか?
1 回の成功した呼び出しによって満たされた 1 つの読み取りバッファーから HTTP ヘッダーのセット全体を解析できると便利なので、これを求めていSSL_read()
ます。それが奇数のリクエストを拒否することを意味する場合 (たとえば、すべてのリクエストの 0.0000X% のみの場合)、それは私にとって価値があるかもしれません。
編集: Alexei Levenkovは、Cookie が非常に長くなる可能性があるという有効な点を指摘しました。しかし、この特定のサーバーによって Cookie が決して設定されない、または期待されないというシナリオを考えてみましょう。
edit2 : この質問は少し時期尚早でした。その間、私はクライアントの状態ごとに効率的に格納するコードを書き、解析中に任意の数の SSL レコードを受け入れることができ、重大なパフォーマンスの低下を招くことはありませんでした。そうする前に、私は近道をすることができるかどうか疑問に思っていました. 失点。