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}/",
"*", 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);
}
}
发生此错误的一种方式是HTTP.SYS无法将HTTP主机头与其有效UrlAcl列表相匹配。 这可能是因为解决主机名的问题。
您可以在命令行列出映射:
Windows XP支持工具/ 2003支持工具 - httpcfg
httpcfg query urlacl
包含在Windows Vista / 2008/7 + - netsh
netsh http show urlacl
链接地址: http://www.djcxy.com/p/50443.html