2011-11-06 15 views
7

私はHTTPプロキシサーバーを作成しており、多くのクライアントが永続的な接続を維持するために「Connection:Keep-Alive」ヘッダーを使用していることに気付きました。サーバーが最初に処理する前にクライアントが別のHTTP要求を送信する可能性はありますか?永続的なHTTPクライアントは、一度に複数の要求を送信できますか?

たとえば、クライアントは「GET/HTTP/1.1」を送信しますが、サーバーが応答する前に、クライアントは「GET /favicon.ico HTTP/1.1」を送信します。それは可能ですか?または、クライアントは2番目の要求を送信する前に応答を一時停止しますか?

また、永続的な接続を使用する場合、その接続を経由するすべての要求が同じ「Host:」ヘッダーを持つと想定するのは安全ですか?

+2

それはクライアントのために安全ではないだろう、なぜ」私は理解していないだけで持続的な接続 – Flexo

答えて

4

はい、クライアントがリクエストをパイプライン処理する可能性があります。 (http://en.wikipedia.org/wiki/HTTP_pipelining参照)。

最後の質問を回す...クライアントが複数のホストへのリクエストを1つのパイプラインで処理すると仮定することは安全ではありません。 Host:ヘッダーにあなたの質問に直接対処する仕様はないかもしれませんが、それらは同じであることを確信しています。最初の質問について

+0

異なる[HTTPパイプライン](http://en.wikipedia.org/wiki/HTTP_pipelining#Implementation_in_web_proxies)、複数のホストへの要求が単一のパイプラインによって処理されると想定する」単一のパイプラインを使用するのはクライアントの選択です! –

+0

ありがとう、私は、用語 "HTTPパイプライニング"について知らなかった。私はクライアントではなくサーバーを書いているので、クライアントが私に投げつける変なクォークを処理したい。だから私は、永続的な接続が別のホストに接続しようとするケースを処理しようとするべきだと言っていますか? – Yifan

+0

はい、私は、たとえ今日のようなブラウザがほとんどまたはまったく動作しないと思っています。 –

1

は、サーバーが最初に処理する前に、クライアントは別のHTTPリクエストを送信することは可能ですか?

私はそれが可能かもしれないと信じています(おそらく私は間違っています、数年前に読んだことを思い出しました;決定的な答えはHTTPプロトコル仕様です)。しかし、私はあなたがなぜ尋ねているのか理解していません。また、クライアントは同じHTTPサーバーに対して同時に複数のTCP接続を開くことができます。もちろん、同時に多くのクライアントがいます。ヘッダー:2番目の質問も

について

持続的接続を使用している場合、それは同じ「ホスト」を持つことになります、その接続を介してすべての要求を想定しても安全でしょうか?

私はそれが通常そうであると信じていますが、私はそれが確実であると想定しません。異なるHost:ヘッダーを持つ2つのURLが同じIPを共有していることを認識し、同じ接続を再利用できるということを認識して、賢明なHTTPクライアントがあると思います。

しかし、私はあなたがなぜ尋ねているのか分かりません。永続的なHTTP接続は、コストのかかるTCP接続を最小限に抑えるために考案されており、あなたが求めている2つの質問はその点で極端な点です。おそらく、あなたが今日何を記述しているのか、ほとんどのHTTPクライアントが考えているでしょう。

あなたはあなたが送信するものに厳格でなければならないが(w.r.t.標準適合)、受信を受け入れるものに柔軟に対応する必要があります。

+0

一般的なHTTPプロキシサーバーを作成しようとしているので、クライアントが私にスローするものを処理したいので、私は尋ねています。 – Yifan

+0

しかし、なぜあなたにとって重要なのかわかりません。堅牢なHTTPプロキシはQ1にはyes、Q2にはnoと仮定します。 –

5

"永続的な接続を使用する場合、その接続を経由するすべての要求が同じ" Host: "ヘッダーを持つと想定するのは安全ですか?

私はそうは思わない、HTTPbis P1, Section 2.2参照:

受信者が単独で接続してすべてのメッセージを考慮する必要があります。 HTTPはステートレスなプロトコルなので、同じ接続上の2つの要求が同じクライアントからのものであると見なすことも、他の共通の属性を共有することもできません。特に、仲介者は、異なるクライアントからの要求を単一のサーバー接続に混在させることがあります。既存のHTTP拡張(例えば、[RFC4559])のいくつかはこの要件に違反し、相互運用性とセキュリティ上の問題を引き起こす可能性があることに注意してください。

関連する問題