2015-10-25 5 views
5

私はC#HttpListenerクラスを使用していくつかのサーバを実現しています。そして、ここに問題があります。私は、追加のテキストなしC#HttpListener。 EMPTYレスポンスを送信する(アーティファクトなし)

HTTP/1.1 200 OK 

または

HTTP/1.1 400 Bad Request 

のような要求にクライアントに空の応答を送信します。だから私はステータスコードとステータスの説明を設定し、レスポンスにはバイトを書き込まないOutputStream - 私はそれらを必要としません。応答を閉じて、response.Close()メソッドでクライアントにバイトを送信します。 HttpListener Server Header c# - そして、何私はバイオリンで示されるクライアント側で取得すると、サーバおよび日付フィールドの回避策はあり

HTTP/1.1 200 OK 

Transfer-Encoding: chunked 

Server: Microsoft-HTTPAPI/2.0 

Date: Sun, 25 Oct 2015 10:42:12 GMT 


0 

です。

しかし、この "Transfer-Encoding:chunked"アーティファクトと "0"ボディをこのレスポンスから削除するにはどうしたらいいですか?

ありがとうございます!

コード:

private void ProcessContext(HttpListenerContext aContext) 
    { 
     HttpListenerResponse response = aContext.Response; 

     response.StatusCode = (int)HttpStatusCode.OK; 
     response.StatusDescription = "OK"; 
     response.Close(); 

} 

答えて

7

これは、ステータスとContent-Lengthヘッダ以外のすべてを取り除くます:

HttpListener listener = new HttpListener(); 
listener.Prefixes.Add("http://*:5555/"); 
listener.Start(); 
listener.BeginGetContext(ar => 
{ 
    HttpListener l = (HttpListener)ar.AsyncState; 
    HttpListenerContext context = l.EndGetContext(ar); 

    context.Response.Headers.Clear(); 
    context.Response.SendChunked = false; 
    context.Response.StatusCode = 200; 
    context.Response.Headers.Add("Server", String.Empty); 
    context.Response.Headers.Add("Date", String.Empty); 
    context.Response.Close(); 
}, listener); 

やシオマネキにあなたがこのわかります

enter image description here

+0

ありがとう、Nasreddine!そして、 "Content-Length"行を省略することは可能ですか?私たちのクライアントは、裸の「HTTP/1.1 200 OK」というフォームを待ちます。理由を聞かないでください。 – Pavel

+0

*空の行でヘッダから区切られたボディゼロ長の行も削除してください。 – Pavel

+0

@Pavel AFAIK HttpListenerの応答をその詳細レベルまで変更することはできません。彼らは密封されているので、あなたはそれらを継承することもできません – Nasreddine

1

ContentLength64をゼロに設定するだけです

response.ContentLength64 = 0; 
response.OutputStream.Close(); 

あなたが任意の値にコンテンツの長さを設定することなくフラッシュまたは近い応答ストリーム、データをチャンクで送信される場合は、次のデータを通常の方法を送信するために、応答ストリームを閉じる前に。応答本体の0/r/nは実際には閉じたチャンクです。

関連する問題