C#HttpListener’错误请求’问题

前端之家收集整理的这篇文章主要介绍了C#HttpListener’错误请求’问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
出于某种原因,当请求通过非标准地址发送到HttpListener时,它返回
<h1>Bad Request (Invalid Hostname)</h1>

示例包:

GET /index HTTP/1.1
Host: ::ffff:88.118.32.126:2548
Accept: */*

HTTP/1.1 400 Bad Request
Content-Type: text/html
Server: Microsoft-HTTPAPI/1.0
Date: Wed,02 Feb 2011 19:05:18 GMT
Connection: close
Content-Length: 39

<h1>Bad Request (Invalid Hostname)</h1>

我怎么能解决这个问题?

编辑:
这是我的代码

public class Server
{
    private HttpListener Listener;
    private Log Log;

    public int Port = 1555;

    public Server(Log _log)
    {
        Log = _log;
    }

    public void Start()
    {
        Listener = new HttpListener();
        Listener.Prefixes.Add(string.Format("http://{0}:{1}/","88.118.32.126",Port));

        Listener.Prefixes.Add(
            string.Format("http://{0}:{1}/","*",Port)); //added these for testing,but still nothing

        Listener.Prefixes.Add(
            string.Format("http://::ffff:{0}:{1}/",but still nothing

        Listener.Start();
        Listener.BeginGetContext(ProcessRequest,Listener);

        Log.Add(string.Format("HTTP Server started on port {0}",Port),LogType.Info,true);
    }

    private void ProcessRequest(IAsyncResult result)
    {
        HttpListener listener = (HttpListener)result.AsyncState;
        HttpListenerContext context = listener.EndGetContext(result);

        HttpListenerRequest request = context.Request;
        HttpListenerResponse response = context.Response;

        string[] UrlParts = request.RawUrl.Split('/');
        Response output;

        if (request.RawUrl == "/index")
            output = new Response(context.Response.OutputStream,ResponseType.Stats,UrlParts,Log);

        response.ContentLength64 = output.Size;
        response.ContentType = output.Header;

        output.Send();

        if (result.IsCompleted)
            Log.Add(String.Format("OUT > {1,15} {0,8} bytes -> {2}",output.Size,request.RemoteEndPoint.Address,request.RawUrl),true);

        Listener.BeginGetContext(ProcessRequest,Listener);
    }
}

解决方法

发生此错误的一种方法是HTTP.SYS无法将HTTP Host标头与其有效UrlAcl列表匹配.这可能是因为解析主机名时出现问题.

> Related answer explaining configuration steps
> MSDN documentation about setting up HTTP stand-alone
> Fixing a “Bad Request (Invalid Hostname)” – 400 Error,on Windows IIS Server(相关潜在解决方案和评论)

您可以在命令行列出映射:

Windows XP Support Tools/2003 Support Tools – httpcfg

httpcfg query urlacl

包含在Windows Vista / 2008/7中 – netsh

netsh http show urlacl

猜你在找的C&C++相关文章