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 속성을 사용 하 여 HttpListener에서 처리할 URI (Uniform Resource Identifier) 접두사를 지정 하는 문자열을 포함 하는 컬렉션에 대 한 액세스 권한을 얻습니다.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 ("/"). 요청 된 URI와 가장 근접 하 게 일치 하는 접두사가 있는 HttpListener 개체는 요청에 응답 합니다.The HttpListener object with the prefix that most closely matches a requested URI responds to the request. 여러 HttpListener 개체가 동일한 접두사를 추가할 수 없습니다. HttpListener에서 이미 사용 중인 접두사를 추가 하는 경우 Win32Exception 예외가 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가 HttpListener에서 처리 되지 않은 경우 포트 8080에 전송 된 모든 요청을 받으려면 접두사는 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부터 와일드 카드 하위 도메인은 HttpListener 개체에서 관리 하는 URI 접두사에서 지원 됩니다.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. 요청 및 이와 관련 된 응답은 GetContext 메서드 또는 해당 비동기 대응 (BeginGetContextEndGetContext 메서드)에서 반환 된 HttpListenerContext 개체를 사용 하 여 액세스 됩니다.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. 이러한 개체는 HttpWebRequestHttpWebResponse 개체를 사용 하 여 일부 기능을 공유 하지만, 후자 개체는 클라이언트, 서버 및 동작을 구현 하기 때문에 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, AuthenticationSchemesAuthenticationSchemeSelectorDelegate 속성을 참조 하세요.For additional information, see the User, AuthenticationSchemes, and AuthenticationSchemeSelectorDelegate properties.

참고

Https를 사용 하 여 HttpListener를 만드는 경우 해당 수신기의 서버 인증서를 선택 해야 합니다.If you create an HttpListener using https, you must select a Server Certificate for that listener. 그렇지 않으면이 HttpListener에 대 한 HttpWebRequest 쿼리가 예기치 않은 연결이 닫힌 경우 실패 합니다.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 클래스는 Windows에 대 한 모든 HTTP 트래픽을 처리 하는 커널 모드 수신기 인 HTTP.sys를 기반으로 빌드됩니다.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 incoming requests.

ToString()

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

(다음에서 상속됨 Object)

명시적 인터페이스 구현

IDisposable.Dispose()

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

적용 대상

추가 정보