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 |
---|---|
|
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.
|
|
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.
|
|
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. |
|
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. |
|
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.
Nota Há suporte para esse sinalizador. |
|
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 |
---|---|
|
Um ou mais dos parâmetros fornecidos estão em uma forma inutilizável. |
|
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.
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 |