【问题标题】:C# HttpListener. Sending EMPTY response (without any artefacts)C# HttpListener。发送 EMPTY 响应(没有任何人工制品)
【发布时间】:2016-01-24 13:25:25
【问题描述】:

我正在使用 C# HttpListener 类来实现一些服务器。这就是问题所在。我只想向客户发送一个空的响应,比如

HTTP/1.1 200 OK

HTTP/1.1 400 Bad Request

没有任何额外的文字。所以我设置了状态码和状态描述,并且不写任何字节来响应 OutputStream——我只是不需要它们。然后关闭响应以使用 response.Close() 方法向客户端发送字节。而我在 Fiddler 显示的客户端得到的是

HTTP/1.1 200 OK

Transfer-Encoding: chunked

Server: Microsoft-HTTPAPI/2.0

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


0

服务器和日期字段有一个解决方法 - HttpListener Server Header c#.

但是如何从这个响应中删除这些“Transfer-Encoding: chunked”伪影和“0”正文?!

提前感谢大家!

代码:

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

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

}

【问题讨论】:

    标签: c#


    【解决方案1】:

    这将摆脱除状态和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);
    

    在 fiddler 中你会看到:

    【讨论】:

    • 谢谢你,纳斯雷丁!是否可以省略和“Content-Length”行。我们的客户端只等待我们的“HTTP/1.1 200 OK”。不要问为什么..
    • *并删除正文零长度行,该行与标题用空行分隔。
    • @Pavel AFAIK 无法将 HttpListener 的响应修改到该详细程度。你甚至不能继承它们来覆盖行为,因为它们是密封的
    【解决方案2】:

    在关闭响应流之前将ContentLength64设置为零,以便以常规方式传输数据:

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

    如果您在未将内容长度设置为任何值的情况下刷新或关闭响应流,则数据将以块的形式传输。而您响应正文中的0/r/n 实际上是一个结束块。

    【讨论】:

      猜你喜欢
      • 2011-11-18
      • 2021-04-29
      • 2016-01-20
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 2016-10-25
      • 2020-01-09
      相关资源
      最近更新 更多