2011-02-03 19 views
7

Đối với một số lý do khi yêu cầu được gửi đến HttpListener qua địa chỉ không phải standart nó trảC# HttpListener 'yêu cầu Bad' vấn đề

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

Ví dụ gói:

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> 

Làm thế nào tôi có thể giải quyết này?

Edit: Đây là mã của tôi

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

Ông có thể cung cấp một số mã? Bạn khởi tạo HttpListener như thế nào? –

Trả lời

4

Một cách lỗi này xảy ra là khi http.sys không thể phù hợp với tiêu đề chủ HTTP với danh sách các nhân UrlAcl hợp lệ. Điều này có thể là do các sự cố khi giải quyết tên máy chủ.

  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 (giải pháp tiềm năng có liên quan và bình luận)

Bạn có thể liệt kê các ánh xạ tại cửa sổ dòng lệnh:

Windows XP Support Tools/2003 Support Tools - httpcfg

httpcfg query urlacl 

Đi kèm với Windows Vista/2008/7+ - netsh

netsh http show urlacl