2011-02-03 8 views
7

Per qualche ragione quando richiesta viene inviata al HttpListener tramite l'indirizzo non standard restituisceC# HttpListener 'Bad richiesta' problema

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

Esempio pacchetto:

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> 

come potrei risolvere questo problema?

Edit: Questo è il mio codice

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

Potrebbe fornire qualche codice? Come stai iniziando HttpListener? –

risposta

4

Un modo si verifica questo errore è quando HTTP.SYS non può corrispondere l'intestazione host HTTP con la sua lista di urlacl validi di. Questo potrebbe essere a causa di problemi nella risoluzione di un nome host.

  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 (soluzioni potenziali rilevanti e commenti)

è possibile elencare le mappature nella riga di comando:

Windows XP Support Tools/2003 Support Tools - httpcfg

httpcfg query urlacl 

incluso in Windows Vista/2008/7+ - netsh

netsh http show urlacl