C # HttpListener Bad Request Problem

For some reason, when a request is sent by an HttpListener to a non-standard address, it returns

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

Package example:

 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> 

How can i solve this?

Edit: This is my code

 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); } } 
+7
source share
1 answer

One way this error occurs is when HTTP.SYS cannot match the HTTP Host header with its list of valid UrlAcl addresses. This may be due to problems resolving the host name.

You can list the mappings on the command line:

Support Tools Windows XP / 2003 Support Tools - httpcfg

 httpcfg query urlacl 

Bundled with Windows Vista / netsh + - netsh

 netsh http show urlacl 
+4
source

All Articles