HttpListener 클래스

정의

프로그래밍 방식으로 제어되는 간단한 HTTP 프로토콜 수신기를 제공합니다.Provides a simple, programmatically controlled HTTP protocol listener. 이 클래스는 상속될 수 없습니다.This class cannot be inherited.

public ref class HttpListener sealed : IDisposable
public sealed class HttpListener : IDisposable
type HttpListener = class
    interface IDisposable
Public NotInheritable Class HttpListener
Implements IDisposable
상속
HttpListener
구현

예제

다음 코드 예제에서는를 사용 하는 방법을 보여 줍니다 HttpListener .The following code example demonstrates using a HttpListener.

// This example requires the System and System.Net namespaces.
public static void SimpleListenerExample(string[] prefixes)
{
    if (!HttpListener.IsSupported)
    {
        Console.WriteLine ("Windows XP SP2 or Server 2003 is required to use the HttpListener class.");
        return;
    }
    // URI prefixes are required,
    // for example "http://contoso.com:8080/index/".
    if (prefixes == null || prefixes.Length == 0)
      throw new ArgumentException("prefixes");

    // Create a listener.
    HttpListener listener = new HttpListener();
    // Add the prefixes.
    foreach (string s in prefixes)
    {
        listener.Prefixes.Add(s);
    }
    listener.Start();
    Console.WriteLine("Listening...");
    // Note: The GetContext method blocks while waiting for a request.
    HttpListenerContext context = listener.GetContext();
    HttpListenerRequest request = context.Request;
    // Obtain a response object.
    HttpListenerResponse response = context.Response;
    // Construct a response.
    string responseString = "<HTML><BODY> Hello world!</BODY></HTML>";
    byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
    // Get a response stream and write the response to it.
    response.ContentLength64 = buffer.Length;
    System.IO.Stream output = response.OutputStream;
    output.Write(buffer,0,buffer.Length);
    // You must close the output stream.
    output.Close();
    listener.Stop();
}
Public Shared Sub SimpleListenerExample(prefixes As String())
    If Not HttpListener.IsSupported Then
        Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class.")
        Return
    End If
    ' URI prefixes are required,
    ' for example "http://contoso.com:8080/index/".
    If prefixes Is Nothing Or prefixes.Length = 0 Then
        Throw New ArgumentException("prefixes")
    End If

    ' Create a listener
    Dim listener = New HttpListener()

    For Each s As String In prefixes
        listener.Prefixes.Add(s)
    Next
    listener.Start()
    Console.WriteLine("Listening...")
    ' Note: The GetContext method blocks while waiting for a request.
    Dim context As HttpListenerContext = listener.GetContext()
    Console.WriteLine("Listening...")
    ' Obtain a response object
    Dim request As HttpListenerRequest = context.Request
    ' Construct a response.
    Dim response As HttpListenerResponse = context.Response
    Dim responseString As String = "<HTML><BODY> Hello world!</BODY></HTML>"
    Dim buffer As Byte() = System.Text.Encoding.UTF8.GetBytes(responseString)
    ' Get a response stream and write the response to it.
    response.ContentLength64 = buffer.Length
    Dim output As System.IO.Stream = response.OutputStream
    output.Write(buffer, 0, buffer.Length)
    'You must close the output stream.
    output.Close()
    listener.Stop()
End Sub

설명

클래스를 사용 하 여 HttpListener http 요청에 응답 하는 간단한 http 프로토콜 수신기를 만들 수 있습니다.Using the HttpListener class, you can create a simple HTTP protocol listener that responds to HTTP requests. 수신기의 수명 동안 활성화 되었는지는 HttpListener 개체 및 해당 권한으로 애플리케이션 내에서 실행 됩니다.The listener is active for the lifetime of the HttpListener object and runs within your application with its permissions.

를 사용 하려면 HttpListener 생성자를 사용 하 여 클래스의 새 인스턴스를 만들고 속성을 사용 하 여 HttpListener Prefixes 에서 처리할 URI (Uniform resource Identifier) 접두사를 지정 하는 문자열을 포함 하는 컬렉션에 대 한 액세스 권한을 얻습니다 HttpListener .To use HttpListener, create a new instance of the class using the HttpListener constructor and use the Prefixes property to gain access to the collection that holds the strings that specify which Uniform Resource Identifier (URI) prefixes the HttpListener should process.

URI 접두사 문자열은 스키마 (http 또는 https), 호스트, 선택적 포트 및 선택적 경로로 구성 됩니다.A URI prefix string is composed of a scheme (http or https), a host, an optional port, and an optional path. 전체 접두사 문자열의 예는 http://www.contoso.com:8080/customerData/ 입니다.An example of a complete prefix string is http://www.contoso.com:8080/customerData/. 접두사는 슬래시 ("/")로 끝나야 합니다.Prefixes must end in a forward slash ("/"). 요청 된 HttpListener URI와 가장 근접 하 게 일치 하는 접두사가 있는 개체는 요청에 응답 합니다.The HttpListener object with the prefix that most closely matches a requested URI responds to the request. 여러 HttpListener 개체가 동일한 접두사를 추가할 수는 없습니다 .에서 Win32Exception HttpListener 이미 사용 중인 접두사를 추가 하는 경우 예외가 throw 됩니다.Multiple HttpListener objects cannot add the same prefix; a Win32Exception exception is thrown if a HttpListener adds a prefix that is already in use.

포트가 지정 된 경우에는 호스트 요소를 ""로 대체 * 하 여 요청 된 URI가 HttpListener 다른 접두사와 일치 하지 않는 경우에서 포트에 전송 된 요청을 수락 함을 나타낼 수 있습니다.When a port is specified, the host element can be replaced with "*" to indicate that the HttpListener accepts requests sent to the port if the requested URI does not match any other prefix. 예를 들어 요청 된 URI가 any에서 처리 되지 않을 때 포트 8080에 전송 된 모든 요청을 수신 하려면 HttpListener 접두사는 http:// * : 8080/ 입니다.For example, to receive all requests sent to port 8080 when the requested URI is not handled by any HttpListener, the prefix is http://*:8080/. 마찬가지로에서 HttpListener 포트로 전송 된 모든 요청을 허용 하도록 지정 하려면 host 요소를 "+" 문자로 바꿉니다.Similarly, to specify that the HttpListener accepts all requests sent to a port, replace the host element with the "+" character. 예를 들어 https://+:8080 와 같습니다.For example, https://+:8080. 경로를 * 포함 하는 접두사에는 "" 및 "+" 문자가 있을 수 있습니다.The "*" and "+" characters can be present in prefixes that include paths.

Windows 10의 .NET Core 2.0 또는 .NET Framework 4.6부터 와일드 카드 하위 도메인은 개체에서 관리 하는 URI 접두사에서 지원 됩니다 HttpListener .Starting with .NET Core 2.0 or .NET Framework 4.6 on Windows 10, wildcard subdomains are supported in URI prefixes that are managed by an HttpListener object. 와일드 카드 하위 도메인을 지정 하려면 * URI 접두사에서 호스트 이름의 일부로 "" 문자를 사용 합니다.To specify a wildcard subdomain, use the "*" character as part of the hostname in a URI prefix. 예를 들면 http:// * . foo.com/ 입니다.For example, http://*.foo.com/. 이를 메서드에 인수로 전달 Add 합니다.Pass this as the argument to the Add method. 이는 Windows 10의 .NET Core 2.0 또는 .NET Framework 4.6와 동일 하 게 작동 합니다. 이전 버전에서는을 생성 HttpListenerException 합니다.This works as of .NET Core 2.0 or .NET Framework 4.6 on Windows 10; in earlier versions, this generates an HttpListenerException.

경고

최상위 와일드 카드 바인딩 (http:// * : 8080/http://+:8080 )은 사용할 수 없습니다 .Top-level wildcard bindings (http://*:8080/ and http://+:8080) should not be used. 최상위 와일드카드 바인딩은 보안 취약점에 앱을 노출시킬 수 있습니다.Top-level wildcard bindings can open up your app to security vulnerabilities. 강력한 와일드카드와 약한 와일드카드 모두에 적용됩니다.This applies to both strong and weak wildcards. 와일드카드보다는 명시적 호스트 이름을 사용합니다.Use explicit host names rather than wildcards. 전체 부모 도메인을 제어하는 경우 하위 도메인 와일드카드 바인딩(예: *.mysub.com)에는 이러한 보안 위험이 없습니다(취약한 *.com과 반대임).Subdomain wildcard binding (for example, *.mysub.com) doesn't have this security risk if you control the entire parent domain (as opposed to *.com, which is vulnerable). 자세한 내용은 rfc7230 섹션-5.4를 참조하세요.See rfc7230 section-5.4 for more information.

클라이언트의 요청에 대 한 수신을 시작 하려면 URI 접두사를 컬렉션에 추가 하 고 메서드를 호출 Start 합니다.To begin listening for requests from clients, add the URI prefixes to the collection and call the Start method. HttpListener 는 클라이언트 요청을 처리 하기 위한 동기 모델과 비동기 모델을 모두 제공 합니다.HttpListener offers both synchronous and asynchronous models for processing client requests. 요청 및 이와 관련 된 응답은 HttpListenerContext GetContext 메서드 또는 해당 비동기 상응 하는 및 메서드에 의해 반환 된 개체를 사용 하 여 액세스 됩니다 BeginGetContext EndGetContext .Requests and their associated responses are accessed using the HttpListenerContext object returned by the GetContext method or its asynchronous counterparts, the BeginGetContext and EndGetContext methods.

모델은 동기 모델과 클라이언트 요청을 대기 하는 동안 애플리케이션을 차단 하 고 한 번에 하나의 요청을 처리 하려는 경우 적합 합니다.The synchronous model is appropriate if your application should block while waiting for a client request and if you want to process only one request at a time. 동기 모델을 사용 하 여 GetContext 클라이언트가 요청을 보낼 때까지 대기 하는 메서드를 호출 합니다.Using the synchronous model, call the GetContext method, which waits for a client to send a request. 메서드는 발생 한 HttpListenerContext 처리를 위해 개체를 반환 합니다.The method returns an HttpListenerContext object to you for processing when one occurs.

더 복잡 한 비동기 모델에서 애플리케이션의 실행 스레드에서 자체 처리 되는 요청 및 각 요청을 기다리는 동안 차단 하지 않습니다.In the more complex asynchronous model, your application does not block while waiting for requests and each request is processed in its own execution thread. 사용 된 BeginGetContext 들어오는 각 요청에 대해 호출 되는 애플리케이션 정의 메서드를 지정 하는 방법입니다.Use the BeginGetContext method to specify an application-defined method to be called for each incoming request. 해당 메서드 내에서 메서드를 호출 EndGetContext 하 여 요청을 가져오고 처리 하 고 응답 합니다.Within that method, call the EndGetContext method to obtain the request, process it, and respond.

두 모델에서 들어오는 요청은 속성을 사용 하 여 액세스 되며 HttpListenerContext.Request 개체로 표현 됩니다 HttpListenerRequest .In either model, incoming requests are accessed using the HttpListenerContext.Request property and are represented by HttpListenerRequest objects. 마찬가지로 응답은 속성을 사용 하 여 액세스 되며 HttpListenerContext.Response 개체로 표현 됩니다 HttpListenerResponse .Similarly, responses are accessed using the HttpListenerContext.Response property and are represented by HttpListenerResponse objects. 이러한 개체는 및 개체와 일부 HttpWebRequest 기능 HttpWebResponse 을 공유 하지만, 후자 개체는 HttpListener 클라이언트, 서버 및 동작을 구현 하기 때문에 함께 사용할 수 없습니다.These objects share some functionality with the HttpWebRequest and HttpWebResponse objects, but the latter objects cannot be used in conjunction with HttpListener because they implement client, not server, behaviors.

HttpListener 클라이언트 인증을 요구할 수 있습니다.An HttpListener can require client authentication. 인증에 사용할 특정 체계를 지정 하거나 사용할 체계를 결정 하는 대리자를 지정할 수 있습니다.You can either specify a particular scheme to use for authentication, or you can specify a delegate that determines the scheme to use. 클라이언트 id에 대 한 정보를 얻으려면 인증 양식이 필요 합니다.You must require some form of authentication to obtain information about the client's identity. 자세한 내용은 User , 및 속성을 참조 하세요 AuthenticationSchemes AuthenticationSchemeSelectorDelegate .For additional information, see the User, AuthenticationSchemes, and AuthenticationSchemeSelectorDelegate properties.

참고

HttpListenerHttps를 사용 하 여를 만드는 경우 해당 수신기의 서버 인증서를 선택 해야 합니다.If you create an HttpListener using https, you must select a Server Certificate for that listener. 그렇지 않으면 HttpWebRequest HttpListener 연결이 예기치 않게 종료 되어 해당 쿼리가 실패 합니다.Otherwise, an HttpWebRequest query of this HttpListener will fail with an unexpected close of the connection.

참고

네트워크 셸 (netsh.exe)을 사용 하 여 서버 인증서 및 기타 수신기 옵션을 구성할 수 있습니다.You can configure Server Certificates and other listener options by using Network Shell (netsh.exe). 자세한 내용은 네트워크 셸 (Netsh) 을 참조 하세요.See Network Shell (Netsh) for more details. 실행 파일은 Windows Server 2008 및 Windows Vista로 전달 되기 시작 했습니다.The executable began shipping with Windows Server 2008 and Windows Vista.

참고

에 대해 여러 인증 체계를 지정 하는 경우 HttpListener 수신기는 Negotiate ,, NTLM Digest 및 순서로 클라이언트를 챌린지 Basic 합니다.If you specify multiple authentication schemes for the HttpListener, the listener will challenge clients in the following order: Negotiate, NTLM, Digest, and then Basic.

HTTP.sysHTTP.sys

HttpListener클래스는 HTTP.sys Windows에 대 한 모든 HTTP 트래픽을 처리 하는 커널 모드 수신기를 기반으로 빌드됩니다.The HttpListener class is built on top of HTTP.sys, which is the kernel mode listener that handles all HTTP traffic for Windows. HTTP.sys 연결 관리, 대역폭 제한 및 웹 서버 로깅을 제공 합니다.HTTP.sys provides connection management, bandwidth throttling, and web server logging. HttpCfg.exe 도구를 사용 하 여 SSL 인증서를 추가 합니다.Use the HttpCfg.exe tool to add SSL certificates.

생성자

HttpListener()

HttpListener 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the HttpListener class.

속성

AuthenticationSchemes

클라이언트를 인증하는 데 사용되는 인증 체계를 가져오거나 설정합니다.Gets or sets the scheme used to authenticate clients.

AuthenticationSchemeSelectorDelegate

클라이언트 인증에 사용되는 프로토콜을 결정하기 위해 호출되는 대리자를 가져오거나 설정합니다.Gets or sets the delegate called to determine the protocol used to authenticate clients.

DefaultServiceNames

등록된 접두사로 확인되는 SPN(서비스 공급자 이름) 기본 목록을 가져옵니다.Gets a default list of Service Provider Names (SPNs) as determined by registered prefixes.

ExtendedProtectionPolicy

세션에 대한 확장 보호에 사용할 ExtendedProtectionPolicy를 가져오거나 설정합니다.Gets or sets the ExtendedProtectionPolicy to use for extended protection for a session.

ExtendedProtectionSelectorDelegate

각 요청에 사용할 ExtendedProtectionPolicy를 확인하기 위해 호출되는 대리자를 가져오거나 설정합니다.Gets or sets the delegate called to determine the ExtendedProtectionPolicy to use for each request.

IgnoreWriteExceptions

Boolean에서 클라이언트에 응답을 보낼 때 발생하는 예외를 애플리케이션에서 받을지 여부를 지정하는 HttpListener 값을 가져오거나 설정합니다.Gets or sets a Boolean value that specifies whether your application receives exceptions that occur when an HttpListener sends the response to the client.

IsListening

HttpListener가 시작되었는지 여부를 나타내는 값을 가져옵니다.Gets a value that indicates whether HttpListener has been started.

IsSupported

현재 운영 체제에서 HttpListener를 사용할 수 있는지 여부를 나타내는 값을 가져옵니다.Gets a value that indicates whether HttpListener can be used with the current operating system.

Prefixes

HttpListener 개체에서 처리하는 URI(Uniform Resource Identifier) 접두사를 가져옵니다.Gets the Uniform Resource Identifier (URI) prefixes handled by this HttpListener object.

Realm

HttpListener 개체와 연결된 영역(또는 리소스 파티션)을 가져오거나 설정합니다.Gets or sets the realm, or resource partition, associated with this HttpListener object.

TimeoutManager

HttpListener 인스턴스의 시간 초과 관리자입니다.The timeout manager for this HttpListener instance.

UnsafeConnectionNtlmAuthentication

NTLM이 사용될 때 동일한 TCP(Transmission Control Protocol) 연결을 사용하는 추가 요청을 인증해야 하는지 여부를 제어하는 Boolean 값을 가져오거나 설정합니다.Gets or sets a Boolean value that controls whether, when NTLM is used, additional requests using the same Transmission Control Protocol (TCP) connection are required to authenticate.

메서드

Abort()

HttpListener 개체를 즉시 종료하고 현재 큐에 대기 중인 모든 요청을 삭제합니다.Shuts down the HttpListener object immediately, discarding all currently queued requests.

BeginGetContext(AsyncCallback, Object)

들어오는 요청에 대한 비동기 검색을 시작합니다.Begins asynchronously retrieving an incoming request.

Close()

HttpListener를 종료합니다.Shuts down the HttpListener.

EndGetContext(IAsyncResult)

들어오는 클라이언트 요청을 검색하기 위한 비동기 작업을 완료합니다.Completes an asynchronous operation to retrieve an incoming client request.

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
GetContext()

들어오는 요청을 기다리고 요청을 받으면 반환됩니다.Waits for an incoming request and returns when one is received.

GetContextAsync()

들어오는 요청을 비동기 작업으로 대기합니다.Waits for an incoming request as an asynchronous operation.

GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
Start()

이 인스턴스에서 들어오는 요청을 받을 수 있도록 합니다.Allows this instance to receive incoming requests.

Stop()

이 인스턴스가 새로 들어오는 요청의 수신을 중지하고 진행 중인 모든 요청의 처리를 종료합니다.Causes this instance to stop receiving new incoming requests and terminates processing of all ongoing requests.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)

명시적 인터페이스 구현

IDisposable.Dispose()

HttpListener 개체에서 보유한 리소스를 해제합니다.Releases the resources held by this HttpListener object.

적용 대상