Função HttpSendHttpResponse (http.h)

A função HttpSendHttpResponse envia uma resposta HTTP para a solicitação HTTP especificada.

Sintaxe

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
);

Parâmetros

[in] RequestQueueHandle

Um identificador para a fila de solicitação da qual a solicitação especificada foi recuperada. Uma fila de solicitação é criada e seu identificador retornado por uma chamada para a função HttpCreateRequestQueue .

Windows Server 2003 com SP1 e Windows XP com SP2: O identificador para a fila de solicitação é criado pela função HttpCreateHttpHandle .

[in] RequestId

Um identificador da solicitação HTTP à qual essa resposta corresponde. Esse valor é retornado no membro RequestId da estrutura HTTP_REQUEST por uma chamada para a função HttpReceiveHttpRequest . Esse valor não pode ser HTTP_NULL_ID.

[in] Flags

Esse parâmetro pode ser uma combinação de alguns dos seguintes valores de sinalizador. Aqueles que são mutuamente exclusivos são marcados de acordo.

Flags Significado
HTTP_SEND_RESPONSE_FLAG_DISCONNECT
A conexão de rede deve ser desconectada após o envio dessa resposta, substituindo todos os recursos de conexão persistente associados à versão do HTTP em uso.
Cuidado Combinar HTTP_SEND_RESPONSE_FLAG_DISCONNECT e HTTP_SEND_RESPONSE_FLAG_MORE_DATA em uma única chamada para a função HttpSendHttpResponse produz resultados indefinidos.
 
HTTP_SEND_RESPONSE_FLAG_MORE_DATA
Dados adicionais do corpo da entidade para essa resposta são enviados pelo aplicativo por meio de uma ou mais chamadas subsequentes para HttpSendResponseEntityBody. A última chamada que envia dados de entidade-corpo define esse sinalizador como zero.
Cuidado Combinar HTTP_SEND_RESPONSE_FLAG_DISCONNECT e HTTP_SEND_RESPONSE_FLAG_MORE_DATA em uma única chamada para a função HttpSendHttpResponse produz resultados indefinidos.
 
HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA
Esse sinalizador permite o buffer de dados no kernel por resposta.

Ele deve ser usado por um aplicativo que faz E/S síncrona ou por um aplicativo que faz E/S assíncrona com não mais de um envio pendente por vez.

Aplicativos que usam E/S assíncrona e que podem ter mais de um envio pendente por vez não devem usar esse sinalizador.

Quando esse sinalizador é definido, ele também deve ser usado consistentemente em chamadas para a função HttpSendResponseEntityBody .

Windows Server 2003: Não há suporte para esse sinalizador. Esse sinalizador é novo para o Windows Server 2003 com SP1.

HTTP_SEND_RESPONSE_FLAG_ENABLE_NAGLING
Habilita o algoritmo de navegação TCP somente para este envio.

Windows Server 2003 com SP1 e Windows XP com SP2: Não há suporte para esse sinalizador.

HTTP_SEND_RESPONSE_FLAG_PROCESS_RANGES
Especifica que, para uma solicitação de intervalo, o conteúdo de resposta completo é passado e o chamador deseja que a API HTTP processe intervalos adequadamente.
Nota Esse sinalizador só tem suporte para respostas a solicitações HTTP GET e oferece um subconjunto limitado de funcionalidade. Os aplicativos que exigem processamento de intervalo completo devem executá-lo no modo de usuário e não depender de HTTP.sys. Seu uso é desencorajado.
 
Windows Server 2008 R2 e Windows 7 ou posterior.

Nota Há suporte para esse sinalizador.

HTTP_SEND_RESPONSE_FLAG_OPAQUE
Especifica que a solicitação/resposta não está em conformidade com HTTP e todos os bytes subsequentes devem ser tratados como entidade-corpo. Os aplicativos especificam esse sinalizador quando ele está aceitando uma solicitação de atualização do Web Socket e informando HTTP.sys para tratar os dados de conexão como dados opacos.

Esse sinalizador só é permitido quando o membro StatusCode do pHttpResponse é 101, alternando protocolos. HttpSendHttpResponse retornará ERROR_INVALID_PARAMETER para todos os outros tipos de resposta HTTP se esse sinalizador for usado.

Windows 8 e posterior: Há suporte para esse sinalizador.

[in] HttpResponse

Um ponteiro para uma estrutura HTTP_RESPONSE que define a resposta HTTP.

[in, optional] CachePolicy

Um ponteiro para a estrutura de HTTP_CACHE_POLICY usada para armazenar a resposta em cache.

Windows Server 2003 com SP1 e Windows XP com SP2: Esse parâmetro é reservado e deve ser NULL.

[out] BytesSent

Opcional. Um ponteiro para uma variável que recebe o número, em bytes, enviado se a função opera de forma síncrona.

Ao fazer uma chamada assíncrona usando pOverlapped, defina pBytesSent como NULL. Caso contrário, quando pOverlapped é definido como NULL, pBytesSent deve conter um endereço de memória válido e não ser definido como NULL.

[in] Reserved1

Esse parâmetro é reservado e deve ser NULL.

[in] Reserved2

Esse parâmetro é reservado e precisa ser zero.

[in] Overlapped

Para chamadas assíncronas, defina pOverlapped para apontar para uma estrutura OVERLAPPED ; para chamadas síncronas, defina como NULL.

Uma chamada síncrona bloqueia até que todos os dados de resposta especificados no parâmetro pHttpResponse sejam enviados, enquanto uma chamada assíncrona retorna imediatamente ERROR_IO_PENDING e o aplicativo de chamada usa as portas de conclusão GetOverlappedResult ou de E/S para determinar quando a operação é concluída. Para obter mais informações sobre como usar estruturas OVERLAPPED para sincronização, consulte Sincronização e entrada e saída sobrepostas.

[in, optional] LogData

Um ponteiro para a estrutura de HTTP_LOG_DATA usada para registrar a resposta em log. Passe um ponteiro para a estrutura HTTP_LOG_FIELDS_DATA e converta-o em PHTTP_LOG_DATA.

Lembre-se de que, mesmo quando o registro em log estiver habilitado em um grupo de URL ou sessão de servidor, a resposta não será registrada, a menos que o aplicativo forneça a estrutura de dados dos campos de log.

Windows Server 2003 e Windows XP com SP2: Esse parâmetro é reservado e deve ser NULL.

Windows Vista e Windows Server 2008: Esse parâmetro é novo para Windows Vista e Windows Server 2008

Valor retornado

Se a função for bem-sucedida, a função retornará NO_ERROR.

Se a função for usada de forma assíncrona, um valor retornado de ERROR_IO_PENDING indicará que a próxima solicitação ainda não está pronta e será recuperada posteriormente por meio de mecanismos normais de conclusão de E/S sobrepostos.

Se a função falhar, ela retornará um dos seguintes códigos de erro.

Valor Significado
ERROR_INVALID_PARAMETER
Um ou mais dos parâmetros fornecidos estão em uma forma inutilizável.
Outros
Um código de erro do sistema definido em WinError.h.

Comentários

A função HttpSendHttpResponse é usada para criar e enviar um cabeçalho de resposta, e a função HttpSendResponseEntityBody pode ser usada para enviar dados de entidade-corpo conforme necessário.

Se nem um cabeçalho de comprimento de conteúdo nem um cabeçalho de codificação de transferência estiverem incluídos na resposta, o aplicativo deverá indicar o final da resposta fechando explicitamente a conexão usando o sinalizador HTTP_SEND_RESPONSE_DISCONNECT .

Se um aplicativo especificar um cabeçalho "Server:" em uma resposta, usando o identificador HttpHeaderServer na estrutura HTTP_KNOWN_HEADER , esse valor especificado será colocado como a primeira parte do cabeçalho, seguido por um espaço e, em seguida, "Microsoft-HTTPAPI/1.0". Se nenhum cabeçalho de servidor for especificado, HttpSendHttpResponse fornecerá "Microsoft-HTTPAPI/1.0" como o cabeçalho do servidor.

Nota A função HttpSendHttpResponse e HttpSendResponseEntityBody não deve ser chamada simultaneamente de threads diferentes no mesmo RequestId.
 

Requisitos

   
Cliente mínimo com suporte Windows Vista, Windows XP com SP2 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho http.h
Biblioteca Httpapi.lib
DLL Httpapi.dll

Confira também

Funções da API do Servidor HTTP versão 1.0

HTTP_RESPONSE

HttpReceiveHttpRequest

HttpReceiveRequestEntityBody

HttpSendResponseEntityBody