C# HttpListener 'Bad request' problem
For some reason when request is sent to HttpListener via non-standart address it returns
<h1>Bad Request (Invalid Hostname)</h1>
Example packet:
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 could 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);
}
}
One way this error occurs is when HTTP.SYS can not match the HTTP Host header with its list of valid UrlAcl's. This could be because of problems resolving a hostname.
You can list the mappings at the command line:
Windows XP Support Tools / 2003 Support Tools - httpcfg
httpcfg query urlacl
Included with Windows Vista / 2008 / 7+ - netsh
netsh http show urlacl
链接地址: http://www.djcxy.com/p/50444.html