Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Как правило, задачи HTTP-сервера выполняются в определенном порядке; То есть одна задача должна быть завершена и выходные данные, полученные до начала следующей задачи.
Страница задач создается для представления примера кода о конкретных задачах, выполняемых приложением HTTP Server. Страница задачи ссылается на файл расширения C примера HTTP-сервера. При установке PSDK на диске C:\ локального компьютера полный пример приложения сервера устанавливается в C:\Program Files\Microsoft SDK\Samples\netds\http\server.
Следующий список определяет задачи HTTP-сервера:
- инициализация службы HTTP
- регистрация URL-адресов для прослушивания
- вызов подпрограммы для получения запроса
- получения запроса
- Обработка HTTP-запроса
- Отправить http-ответ
- Отправить ответ HTTP POST
- очистка API HTTP-сервера
Инициализация службы HTTP
Служба HTTP инициализируется с помощью функции HttpInitialize, а дескриптор очереди запросов создается с помощью HttpCreateHttpHandle. Сервер должен быть инициализирован перед вызовом других функций сервера. Очередь запросов должна быть создана, прежде чем служба сможет зарегистрировать URL-адреса для прослушивания входящих HTTP-запросов.
Дополнительные сведения и пример кода см. в разделе инициализациислужбы HTTP.
Регистрация URL-адресов для прослушивания
Чтобы API HTTP-сервера прослушивал входящие запросы, определенные URL-адреса регистрируются в API путем вызова функции HttpAddUrl. Входящие запросы, соответствующие этим URL-адресам, направляются в очередь запросов, указанную в этом вызове.
Дополнительные сведения и пример кода см. в разделе Регистрация URL-адресов для прослушивания.
Вызов подпрограммы для получения запроса
Функция DoReceiveRequest выделяет буфер запроса, инициализирует идентификатор запроса и запускает цикл для получения запросов.
Дополнительные сведения и пример кода см. в разделе Вызов подпрограммы для получения запроса.
Получение запроса
API HTTP-сервера предоставляет структуру запроса для хранения проанализированного входящего запроса. Эта структура выделяется приложением и инициализируется при получении входящего запроса. Приложение вызывает функцию HttpReceiveHttpRequest для получения запроса. Если буфер запроса слишком мал, чтобы получить запрос, приложение может увеличить размер буфера и вызвать HttpReceiveHttpRequest снова, чтобы получить весь запрос.
Дополнительные сведения и пример кода см. в разделе получениезапроса.
Обработка HTTP-запроса
В примере приложения показано, как обрабатывать команды HTTP GET и POST. Приложение отправляет ошибку 503 (NOT_IMPLEMENTED), если команды присутствуют в запросе, который приложение не обрабатывает.
Обратите внимание, что URL-адрес для обработки запросов — это обработанный URL-адрес, содержащийся в элементе CookedUrl структуры HTTP_REQUEST_V1. Не выполняйте необработанные URL-адреса в элементе pRawUrl, который предназначен исключительно для отслеживания и статистических целей.
Дополнительные сведения и пример кода см. в разделе ОбработкаHTTP-запроса.
Отправка HTTP-ответа
Структура ответа выделяется и инициализируется с кодом состояния и фразой причины в макросе INITIALIZE_HTTP_RESPONSE. Известный заголовок HTTP добавляется в структуру ответа в макросе ADD_KNOWN_HEADER, а тело сущности добавляется в ответ из блока данных из памяти. Функция HttpSendHttpResponse вызывается для отправки ответа. В этом примере приложение отправляет простой ответ 200 OK на запрос GET.
Дополнительные сведения и пример кода см. в разделе Отправке http-ответа.
Отправка ответа HTTP POST
Запрос POST требует больше обработки, чем запрос GET. Текст сущности запроса получается путем вызова функции HttpReceiveRequestEntityBody. Приложение отправляет ответ и текст сущности ответа в отдельных вызовах API HTTP-сервера. Заголовки ответа отправляются с помощью httpSendHttpResponse. Тело сущности отправляется в блок данных из дескриптора файла с функцией HttpSendResponseEntityBody.
Дополнительные сведения и пример кода см. в разделе Отправка ответа HTTP POST.
Очистка API HTTP-сервера
К операциям очистки ДЛЯ API HTTP-сервера относятся:
- Удаление всех зарегистрированных URL-адресов.
- Закрытие дескриптора в очередь запроса.
- Завершение ресурсов, созданных API HTTP-сервера.
Приложение вызывает функцию HttpRemoveUrl для отмены регистрации URL-адресов, зарегистрированных начальной функцией httpAddUrl . Приложение также вызывает httpTerminate для каждого вызова HttpInitialize с соответствующими параметрами флага. Этот вызов завершает все ресурсы, созданные вызовом HttpInitialize.
Дополнительные сведения и пример кода см. в разделе Очистка API HTTP-сервера.