Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Следующий список определяет типичную последовательность операций, использующих API HTTP-сервера:
- Инициализировать API HTTP-сервера с помощью функции httpinitialize.
- Создайте очередь запросов с помощью функции HttpCreateHttpHandle.
- Зарегистрируйте один или несколько URL-адресов с помощью функции HttpAddUrl.
- Получение входящих запросов, направленных на зарегистрированные URL-адреса , с помощью функции httpReceiveHttpRequest и отправки HTTP-ответов для этих запросов с помощью функции HttpSendHttpResponse.
- (Необязательно) При отправке ответа используйте функцию HttpSendResponseEntityBody для отправки дополнительного тела сущности.
- Выполните операции очистки с помощью функций HttpRemoveUrl , CloseHandle и HttpTerminate .
В операциях, использующих URL-адреса, обратите внимание, что следует использовать тот обработанный URL-адрес, который содержится в элементе CookedUrl структуры HTTP_REQUEST_V1. Не используйте необработанные URL-адреса в элементе pRawUrl, который предназначен исключительно для отслеживания и статистических целей.
Каждое приложение создает собственную очередь запросов. Приложение получает дескриптор очереди запросов из HttpCreateHttpHandle. Он передает этот дескриптор функции HttpAddUrl, чтобы добавить URL-адрес в очередь запроса. Приложение получает уведомление о входящем запросе и извлекает его из очереди запросов путем вызова функции HttpReceiveHttpRequest с дескриптором очереди запросов. Эту функцию можно использовать для получения заголовков запроса или как заголовков, так и содержимого тела сущности. HttpReceiveHttpRequest также возвращает идентификатор запроса (RequestId) для полученного запроса, уникального для дескриптора запроса.
Заметка
Это ответственность приложения — проверять все соответствующие заголовки запросов, включая заголовки согласования содержимого, если они используются, и отклонять запросы в случае несоответствия содержимому заголовков. API HTTP-сервера гарантирует правильность завершения каждой строки заголовка и не содержит недопустимых символов.
Используйте функцию HttpReceiveRequestEntityBody с дескриптором очереди запросов, чтобы получить последующие части тела сущности запроса, если таковые имеются.
Заметка
API HTTP-сервера декодирует блокированные сообщения на стороне приема, но не выполняет кусковую кодировку на стороне отправки. Если фрагментирование требуется на стороне отправки, приложение должно реализовать его. Дополнительные сведения о кодировании с фрагментами см. в документе RFC 2616.
Используйте функцию HttpReceiveClientCertificate с приложениями, которые обслуживают URL-адреса с помощью безопасной схемы ("https"), чтобы при необходимости получить информацию о сертификате клиента.
Ответы отправляются с помощью функции HttpSendHttpResponse. Эта функция использует RequestId из соответствующего запроса для отправки ответа. Ответ можно отправить в течение времени с помощью нескольких вызовов API, вызывая функцию httpSendResponseEntityBody с идентификатором запроса из первоначально полученного запроса.
Заметка
По умолчанию httpSendHttpResponse использует microsoft-HTTPAPI/1.0 в качестве заголовка Server:. Если приложение задает заголовок сервера в ответе, это значение помещается в первую часть заголовка сервера, а затем пробел, а затем —Microsoft-HTTPAPI/1.0.
Как правило, API HTTP-сервера скрывает сведения об управлении подключениями и их установлении и завершении от приложений. Однако приложение может при необходимости обнаружить завершение подключения, вызвав HttpWaitForDisconnect.
Приложения должны очиститься, выполнив следующие действия.
- Если приложение не прослушивает или не отвечает на URL-адрес, URL-адрес удаляется с помощью функции HttpRemoveURL.
- После завершения работы приложения с очередью запросов закройте дескриптор очереди запросов при помощи функции CloseHandle.
- После завершения работы приложения с помощью API HTTP-сервера вызовите функцию HttpTerminate.