2

2 つの TCP 接続を開きました: 1. 通常の接続 (エコー サーバー、クライアントの実装中) & 2. HTTP 接続

サーバーとして apache を実行しているときに、curl (変更された) ユーティリティを使用して HTTP 接続を開きました。ここで、curl は接続確立後しばらくの間 GET 要求を送信しません。接続確立後の通常の接続では、サーバーはクライアントからの要求を待っています。しかし、観測されたように、奇妙なことに、接続確立後のHTTP接続で、GETリクエストがクライアントから(しばらくの間)来ていない場合、サーバーはFIN pktをクライアントに送信し、接続の一部を閉じています。 HTTP クライアントが最初の接続直後に GET リクエストを送信することは必須条件ですか。

4

1 に答える 1

0

Apache には Timeout というパラメーターがあります。

そのマニュアルページ ( Apache Core - Timeout Directive ) には次のように記載されています。

TimeOut ディレクティブは、さまざまな状況で Apache が I/O を待機する時間を定義します。

  1. クライアントからデータを読み取るときに、読み取りバッファーが空の場合に TCP パケットの到着を待機する時間の長さ。
  2. クライアントにデータを書き込むときに、送信バッファーがいっぱいの場合にパケットの確認応答を待機する時間の長さ。
  3. mod_cgi では、CGI スクリプトからの出力を待機する時間の長さ。
  4. mod_ext_filter では、フィルタリング プロセスからの出力を待機する時間の長さ。
  5. mod_proxy で、ProxyTimeout が構成されていない場合のデフォルトのタイムアウト値。

あなたはケースNUMBER ONEに陥ったと思います

編集

私は W3 HTTP ドキュメントに潜んでいましたが、タイムアウトへの参照が見つかりませんでした。

しかし、第8章(接続)に私は見つけました:

8.1.4 実際上の考慮事項

通常、サーバーにはタイムアウト値が設定されており、それを超えると非アクティブな接続を維持できなくなります。(...) 永続的な接続を使用する場合、クライアントまたはサーバーのいずれについても、このタイムアウトの長さ (または存在) に要件はありません。

「すべてのサーバーまたはクライアントは、非アクティブな接続タイムアウトに関する動作を自由に選択できる」ように聞こえます

于 2013-01-23T08:24:50.687 に答える