Поделиться через


Класс System.Net.HttpListener

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

HttpListener С помощью класса можно создать простой прослушиватель протокола HTTP, который отвечает на HTTP-запросы. Прослушиватель активен в течение всего времени существования HttpListener объекта и выполняется в приложении с его разрешениями.

Чтобы использовать HttpListener, создайте новый экземпляр класса с помощью HttpListener конструктора и используйте Prefixes свойство для получения доступа к коллекции, содержащей строки, указывающие, какие префиксы универсального идентификатора ресурса (URI) должны обрабатываться HttpListener .

Строка префикса URI состоит из схемы (http или https), узла, необязательного порта и дополнительного пути. Примером полной строки префикса является http://www.contoso.com:8080/customerData/. Префиксы должны заканчиваться косой чертой ("/"). Объект HttpListener с префиксом, который наиболее тесно соответствует запрошенным URI, отвечает на запрос. Несколько HttpListener объектов не могут добавить один и тот же префикс; Win32Exception исключение создается, если HttpListener добавляется префикс, который уже используется.

При указании порта элемент узла можно заменить на "*", чтобы указать, что HttpListener запросы, отправленные на порт, если запрошенный URI не совпадает с любым другим префиксом. Например, чтобы получать все запросы, отправляемые через порт 8080, если запрошенный URI не обрабатывается, HttpListenerпрефикс http ://*:8080/. Аналогичным образом, чтобы указать, что HttpListener все запросы, отправленные на порт, заменяют элемент узла символом "+". Например, https://+:8080. Символы "*" и "+" могут присутствовать в префиксах, которые включают пути.

Wild карта поддомены поддерживаются в префиксах URI, управляемых HttpListener объектом. Чтобы указать дикий карта поддомен, используйте символ "*" в качестве части имени узла в префиксе URI. Например, http://*.foo.com/. Передайте этот аргумент в качестве аргумента методу Add .

Предупреждение

Дикие привязки верхнего уровня карта (http://*:8080/ иhttp://+:8080) не должны использоваться. Это может создать уязвимость и поставить ваше приложение под угрозу. Сюда относятся и строгие, и нестрогие подстановочные знаки. Вместо этого используйте имена узлов в явном виде. Привязки с подстановочными знаками на уровне дочерних доменов (например *.mysub.com) не создают таких угроз безопасности, если вы полностью контролируете родительский домен (в отличие от варианта *.com, создающего уязвимость). Дополнительные сведения см. в документе rfc7230, раздел 5.4.

Чтобы начать прослушивание запросов от клиентов, добавьте префиксы URI в коллекцию и вызовите Start метод. HttpListener предлагает синхронные и асинхронные модели для обработки клиентских запросов. К запросам и связанным ответам обращаются с помощью HttpListenerContext объекта, возвращаемого методом GetContext или его асинхронными аналогами, BeginGetContext методами и EndGetContext методами.

Синхронная модель подходит, если приложение должно блокироваться во время ожидания клиентского запроса и если вы хотите обработать только один запрос за раз. С помощью синхронной модели вызовите GetContext метод, который ожидает отправки запроса клиенту. Метод возвращает HttpListenerContext объект для обработки при возникновении.

В более сложной асинхронной модели приложение не блокируется во время ожидания запросов, и каждый запрос обрабатывается в собственном потоке выполнения. BeginGetContext Используйте метод, чтобы указать определяемый приложением метод для каждого входящего запроса. В этом методе EndGetContext вызовите метод, чтобы получить запрос, обработать его и ответить.

В любой модели входящие запросы получают доступ к свойству HttpListenerContext.Request и представлены объектами HttpListenerRequest . Аналогичным образом ответы получают доступ к свойству HttpListenerContext.Response и представляются объектами HttpListenerResponse . Эти объекты совместно используют некоторые функциональные возможности с объектами и HttpWebResponse объектами, но последние объекты нельзя использовать в сочетании с HttpWebRequestHttpListener тем, что они реализуют клиент, а не сервер, поведение.

Может HttpListener потребоваться проверка подлинности клиента. Можно указать определенную схему, используемую для проверки подлинности, или указать делегат, определяющий используемую схему. Для получения сведений об удостоверении клиента требуется определенная форма проверки подлинности. Дополнительные сведения см. в Userразделе о свойствах AuthenticationSchemesи AuthenticationSchemeSelectorDelegate свойствах.

Примечание.

При создании HttpListener https необходимо выбрать сертификат сервера для этого прослушивателя. В противном случае запросы к этому HttpListener запросу завершаются непредвиденным закрытием соединения.

Примечание.

Сертификаты сервера и другие параметры прослушивателя можно настроить с помощью сетевой оболочки (netsh.exe). Дополнительные сведения см. в статье Network Shell (Netsh ). Исполняемый файл начал доставку с Windows Server 2008 и Windows Vista.

Примечание.

Если для этого задано несколько схем HttpListenerпроверки подлинности, прослушиватель вызовет клиентов в следующем порядке: Negotiate, NTLM, Digestа затем Basic.

HTTP.sys

Класс HttpListener построен на основе HTTP.sysпрослушивателя режима ядра, который обрабатывает весь HTTP-трафик для Windows. HTTP.sys обеспечивает управление подключениями, регулирование пропускной способности и ведение журнала веб-сервера. Используйте средство HttpCfg.exe для добавления SSL-сертификатов.