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


Функция HttpSendHttpResponse (http.h)

Функция HttpSendHttpResponse отправляет HTTP-ответ на указанный HTTP-запрос.

Синтаксис

HTTPAPI_LINKAGE ULONG HttpSendHttpResponse(
  [in]           HANDLE             RequestQueueHandle,
  [in]           HTTP_REQUEST_ID    RequestId,
  [in]           ULONG              Flags,
  [in]           PHTTP_RESPONSE     HttpResponse,
  [in, optional] PHTTP_CACHE_POLICY CachePolicy,
  [out]          PULONG             BytesSent,
  [in]           PVOID              Reserved1,
  [in]           ULONG              Reserved2,
  [in]           LPOVERLAPPED       Overlapped,
  [in, optional] PHTTP_LOG_DATA     LogData
);

Параметры

[in] RequestQueueHandle

Дескриптор очереди запросов, из которой был получен указанный запрос. Создается очередь запроса, и ее дескриптор возвращается вызовом функции HttpCreateRequestQueue .

Windows Server 2003 с пакетом обновления 1 (SP1) и Windows XP с пакетом обновления 2 (SP2): Дескриптор очереди запросов создается функцией HttpCreateHttpHandle .

[in] RequestId

Идентификатор HTTP-запроса, которому соответствует этот ответ. Это значение возвращается в элементе RequestId структуры HTTP_REQUEST путем вызова функции HttpReceiveHttpRequest . Это значение не может быть HTTP_NULL_ID.

[in] Flags

Этот параметр может быть сочетанием некоторых из следующих значений флагов. Те, которые являются взаимоисключающими, помечаются соответствующим образом.

Флаги Значение
HTTP_SEND_RESPONSE_FLAG_DISCONNECT
Сетевое подключение должно быть отключено после отправки этого ответа, переопределяя все функции постоянного подключения, связанные с используемой версией HTTP.
Осторожностью Объединение HTTP_SEND_RESPONSE_FLAG_DISCONNECT и HTTP_SEND_RESPONSE_FLAG_MORE_DATA в одном вызове функции HttpSendHttpResponse приводит к неопределенным результатам.
 
HTTP_SEND_RESPONSE_FLAG_MORE_DATA
Дополнительные данные тела сущности для этого ответа отправляются приложением через один или несколько последующих вызовов HttpSendResponseEntityBody. Последний вызов, отправляющий данные тела сущности, устанавливает для этого флага нулевое значение.
Осторожностью Объединение HTTP_SEND_RESPONSE_FLAG_DISCONNECT и HTTP_SEND_RESPONSE_FLAG_MORE_DATA в одном вызове функции HttpSendHttpResponse приводит к неопределенным результатам.
 
HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA
Этот флаг обеспечивает буферизацию данных в ядре на основе каждого ответа.

Его должно использовать приложение, выполняющее синхронные операции ввода-вывода, или приложение, выполняющее асинхронные операции ввода-вывода с не более чем одной незавершенной отправкой за раз.

Приложения, которые используют асинхронный ввод-вывод и могут иметь несколько невыполненных отправки одновременно, не должны использовать этот флаг.

Если этот флаг установлен, он также должен использоваться согласованно в вызовах функции HttpSendResponseEntityBody .

Windows Server 2003: Этот флаг не поддерживается. Этот флаг является новым для Windows Server 2003 с пакетом обновления 1 (SP1).

HTTP_SEND_RESPONSE_FLAG_ENABLE_NAGLING
Включает алгоритм наглости TCP только для этой отправки.

Windows Server 2003 с пакетом обновления 1 (SP1) и Windows XP с пакетом обновления 2 (SP2): Этот флаг не поддерживается.

HTTP_SEND_RESPONSE_FLAG_PROCESS_RANGES
Указывает, что для запроса диапазона передается полное содержимое ответа, и вызывающий объект хочет, чтобы API HTTP правильно обрабатывал диапазоны.
Примечание Этот флаг поддерживается только для ответов на HTTP-запросы GET и предлагает ограниченное подмножество функциональных возможностей. Приложения, требующие полной обработки, должны выполнять ее в пользовательском режиме и не полагаться на HTTP.sys. Использование не рекомендуется.
 
Windows Server 2008 R2 и Windows 7 или более поздней версии.

Примечание Этот флаг поддерживается.

HTTP_SEND_RESPONSE_FLAG_OPAQUE
Указывает, что запрос и ответ не соответствует HTTP и все последующие байты должны рассматриваться как тело сущности. Приложения задают этот флаг при принятии запроса на обновление веб-сокета и информировании HTTP.sys рассматривать данные подключения как непрозрачные данные.

Этот флаг разрешен только в том случае, если элемент StatusCodeв pHttpResponse имеет значение 101, переключение протоколов. HttpSendHttpResponse возвращает ERROR_INVALID_PARAMETER для всех других типов HTTP-ответов, если используется этот флаг.

Windows 8 и более поздних версий: Этот флаг поддерживается.

[in] HttpResponse

Указатель на структуру HTTP_RESPONSE , которая определяет HTTP-ответ.

[in, optional] CachePolicy

Указатель на структуру HTTP_CACHE_POLICY , используемую для кэширования ответа.

Windows Server 2003 с пакетом обновления 1 (SP1) и Windows XP с пакетом обновления 2 (SP2): Этот параметр зарезервирован и должен иметь значение NULL.

[out] BytesSent

Необязательный элемент. Указатель на переменную, которая получает число в байтах, отправляемое, если функция работает синхронно.

При выполнении асинхронного вызова с помощью pOverlapped задайте для параметра pBytesSentзначение NULL. В противном случае, если pOverlapped имеет значение NULL, pBytesSent должен содержать допустимый адрес памяти, а не иметь значение NULL.

[in] Reserved1

Этот параметр зарезервирован и должен иметь значение NULL.

[in] Reserved2

Этот параметр зарезервирован и должен быть равен нулю.

[in] Overlapped

Для асинхронных вызовов присвойте pOverlapped значение , указывающее на структуру OVERLAPPED ; для синхронных вызовов задайте значение NULL.

Синхронный вызов блокируется до тех пор, пока не будут отправлены все данные ответа, указанные в параметре pHttpResponse , в то время как асинхронный вызов немедленно возвращает ERROR_IO_PENDING и вызывающее приложение затем использует порты getOverlappedResult или завершения ввода-вывода, чтобы определить, когда операция завершена. Дополнительные сведения об использовании структур OVERLAPPED для синхронизации см. в разделе Синхронизация и перекрытие входных и выходных данных.

[in, optional] LogData

Указатель на структуру HTTP_LOG_DATA , используемую для регистрации ответа. Передайте указатель на структуру HTTP_LOG_FIELDS_DATA и приведите его к PHTTP_LOG_DATA.

Имейте в виду, что даже если ведение журнала включено в группе URL-адресов или сеансе сервера, ответ не будет зарегистрирован, если приложение не предоставит структуру данных полей журнала.

Windows Server 2003 и Windows XP с пакетом обновления 2 (SP2): Этот параметр зарезервирован и должен иметь значение NULL.

Windows Vista и Windows Server 2008: Этот параметр является новым для Windows Vista и Windows Server 2008

Возвращаемое значение

Если функция завершается успешно, функция возвращает NO_ERROR.

Если функция используется асинхронно, возвращаемое значение ERROR_IO_PENDING указывает, что следующий запрос еще не готов и извлекается позже с помощью обычных перекрывающихся механизмов завершения ввода-вывода.

Если функция завершается сбоем, она возвращает один из следующих кодов ошибок.

Значение Значение
ERROR_INVALID_PARAMETER
Один или несколько предоставленных параметров доступны в непригодном для использования виде.
Другое
Код системной ошибки, определенный в WinError.h.

Комментарии

Функция HttpSendHttpResponse используется для создания и отправки заголовка ответа, а функция HttpSendResponseEntityBody может использоваться для отправки данных тела сущности при необходимости.

Если ни заголовок длины содержимого, ни заголовок кодирования передачи не включены в ответ, приложение должно указать конец ответа, явно закрыв соединение с помощью флага HTTP_SEND_RESPONSE_DISCONNECT .

Если приложение указывает в ответе заголовок "Server:", используя идентификатор HttpHeaderServer в структуре HTTP_KNOWN_HEADER , указанное значение помещается в качестве первой части заголовка, за которым следует пробел, а затем "Microsoft-HTTPAPI/1.0". Если заголовок сервера не указан, HttpSendHttpResponse предоставляет "Microsoft-HTTPAPI/1.0" в качестве заголовка сервера.

Примечание Функции HttpSendHttpResponse и HttpSendResponseEntityBody не должны вызываться одновременно из разных потоков в одном и том же RequestId.
 

Требования

   
Минимальная версия клиента Windows Vista, Windows XP с пакетом обновления 2 (SP2) [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header http.h
Библиотека Httpapi.lib
DLL Httpapi.dll

См. также раздел

Функции API HTTP-сервера версии 1.0

HTTP_RESPONSE

HttpReceiveHttpRequest

HttpReceiveRequestEntityBody

HttpSendResponseEntityBody