Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье приводятся дополнительные замечания к справочной документации по этому 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. Символы "*" и "+" могут присутствовать в префиксах, которые включают пути.
Подстановочные поддомены поддерживаются в префиксах 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. Эти объекты имеют некоторые функциональные возможности, сходные с объектами HttpWebRequest и HttpWebResponse, но последние объекты нельзя использовать в сочетании с HttpListener, потому что они реализуют клиентское, а не серверное поведение.
Для 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-сертификатов.