8

何らかの理由で、リクエストが非標準アドレスを介して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);
    }
}
4

1 に答える 1

4

このエラーが発生する1つの方法は、HTTP.SYSがHTTPホストヘッダーを有効なUrlAclのリストと一致させることができない場合です。これは、ホスト名の解決に問題があることが原因である可能性があります。

  1. 構成手順を説明する関連回答
  2. HTTPスタンドアロンのセットアップに関するMSDNドキュメント
  3. 「不正な要求(無効なホスト名)」の修正-Windows IISサーバーでの400エラー(関連する潜在的な解決策と解説)

コマンドラインでマッピングを一覧表示できます。

WindowsXPサポートツール/ 2003サポートツール-httpcfg

httpcfg query urlacl

Windows Vista / 2008/7+に含まれています-netsh

netsh http show urlacl
于 2011-02-25T18:39:24.933 に答える