2011-02-03 64 views
7

出於某種原因,當請求是通過非標準地址發送到HttpListener返回C#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}/", 
      "*", Port)); //added these for testing, 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), LogType.Info, true); 

     Listener.BeginGetContext(ProcessRequest, Listener); 
    } 
} 
+0

你能否提供一些代碼?你如何啓動HttpListener? – 2011-02-03 11:32:00

回答

4

的一種方法是,當HTTP.SYS無法與其有效UrlAcl的名單的HTTP主機頭相匹配。這可能是因爲解決主機名的問題。

  1. Related answer explaining configuration steps
  2. MSDN documentation about setting up HTTP stand-alone
  3. 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