2011-02-22 5 views
0

Delphi 2010、最後のIndyソースコードはSvnからです。強制的なHTTP 1.0 idHttpServerとTIME_WAIT

http 1.1を送信するのではなく、TIDHttpServerにhttp 1.0応答を送信させるにはどうすればよいですか? 私は永続的な接続(キープアライブ)を取り除きたいと思っています。クライアントから私のサーバを切断するのではなく、私のサーバからクライアントを切断したいと思っています(サーバのTIME_WAITを避けるためです)。

いくつかのデータ:クライアントによって行われた

要求(この場合は、インターネットエクスプローラ):

GET/HTTP/1.0
は受け入れ:/
のAccept-言語:PT- BR
ユーザーエージェント:Mozilla/4.0(互換性、MSIE 8.0、Windows NT 6.1、WOW64、Trident/4.0、SLCC2、.NET CLR 2.0.50727、.NET CLR 3.5.30729、.NET CLR 3.0.30729、Media Center PC 6.0、InfoPath.3、.NET4.0C、.NET4.0E)
ホスト:localhostを:114
接続:キープアライブ私のインディサーバーから

応答:

HTTP/1.1 200 OK
接続:近い
のContent-Type:text/htmlの。文字セット= ISO-8859-1
のContent-Length:2717

あなたが見ることができるように、クライアント明示的には、HTTP 1.0を使用するようにサーバーを告げたが、インディのサーバーの応答は、http 1.1でした。

EDIT:

AResponseInfo.CloseConnection::私は最善の解決策は、OnCommandGetイベントに設定していることを考え出し

=偽;
AResponseInfo.Connection:= 'close';

AResponseInfo.CloseConnection:= Falseを指定すると、サーバーはクライアントから切断されず、Connection:= 'close'によってクライアントはTIME_WAITサーバーを避けてサーバーから切断されます。 IdCustomHTTPServer.pas

バージョン文字列 'HTTP/1.1' で

答えて

1

ハードTIdHTTPResponseInfo.WriteHeader方式で符号化されます。

このクラスにはオーバーライドできるファクトリがないため、子孫バージョンでの動作を変更できます。 TIdCustomHTTPServer.DoExecute

ただし、ソースがあるため、ハードコードされた文字列を 'HTTP/1.0'に変更するか、プロパティ設定に基づいて応答するように動作を変更することができます。

また、IdHttpServer.KeepLive := False;を設定すると、永続セッションは停止しますが、要求の最後にサーバーがクライアントを切断します。

+1

もちろん、文字列を変更するだけでは十分ではありません。また、HTTP 1.0サーバが想定しているように*クラスが動作することを確認する必要があります。 –

+0

OK ..最高の解決策は、次のように設定することです: AResponseInfo.CloseConnection:= False; AResponseInfo.Connection:= 'close'; CloseConnectionにより、サーバーはクライアントから切断されず、Connection:= 'close'によってクライアントはサーバーから切断されます。しかし、私はあなたにそれを受け入れるだろう、それは私が尋ねたものだからです。ありがとう。 –

関連する問題