Fonction HttpSendHttpResponse (http.h)

La fonction HttpSendHttpResponse envoie une réponse HTTP à la requête HTTP spécifiée.

Syntaxe

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

Paramètres

[in] RequestQueueHandle

Handle de la file d’attente des requêtes à partir de laquelle la requête spécifiée a été récupérée. Une file d’attente de requêtes est créée et son handle est retourné par un appel à la fonction HttpCreateRequestQueue .

Windows Server 2003 avec SP1 et Windows XP avec SP2 : Le handle de la file d’attente des requêtes est créé par la fonction HttpCreateHttpHandle .

[in] RequestId

Identificateur de la requête HTTP à laquelle cette réponse correspond. Cette valeur est retournée dans le membre RequestId de la structure HTTP_REQUEST par un appel à la fonction HttpReceiveHttpRequest . Cette valeur ne peut pas être HTTP_NULL_ID.

[in] Flags

Ce paramètre peut être une combinaison de certaines des valeurs d’indicateur suivantes. Ceux qui s’excluent mutuellement sont marqués en conséquence.

Indicateurs Signification
HTTP_SEND_RESPONSE_FLAG_DISCONNECT
La connexion réseau doit être déconnectée après l’envoi de cette réponse, en remplaçant toutes les fonctionnalités de connexion persistantes associées à la version de HTTP en cours d’utilisation.
Attention La combinaison HTTP_SEND_RESPONSE_FLAG_DISCONNECT et HTTP_SEND_RESPONSE_FLAG_MORE_DATA dans un seul appel à la fonction HttpSendHttpResponse produit des résultats non définis.
 
HTTP_SEND_RESPONSE_FLAG_MORE_DATA
Les données de corps d’entité supplémentaires pour cette réponse sont envoyées par l’application via un ou plusieurs appels ultérieurs à HttpSendResponseEntityBody. Le dernier appel qui envoie des données de corps d’entité définit ensuite cet indicateur sur zéro.
Attention La combinaison HTTP_SEND_RESPONSE_FLAG_DISCONNECT et HTTP_SEND_RESPONSE_FLAG_MORE_DATA dans un seul appel à la fonction HttpSendHttpResponse produit des résultats non définis.
 
HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA
Cet indicateur permet la mise en mémoire tampon des données dans le noyau par réponse.

Il doit être utilisé par une application effectuant des E/S synchrones ou par une application effectuant des E/S asynchrones avec au plus un envoi en attente à la fois.

Les applications qui utilisent des E/S asynchrones et qui peuvent avoir plusieurs envois en attente à la fois ne doivent pas utiliser cet indicateur.

Lorsque cet indicateur est défini, il doit également être utilisé de manière cohérente dans les appels à la fonction HttpSendResponseEntityBody .

Windows Server 2003 : Cet indicateur n’est pas pris en charge. Cet indicateur est nouveau pour Windows Server 2003 avec SP1.

HTTP_SEND_RESPONSE_FLAG_ENABLE_NAGLING
Active l’algorithme de nagling TCP pour cet envoi uniquement.

Windows Server 2003 avec SP1 et Windows XP avec SP2 : Cet indicateur n’est pas pris en charge.

HTTP_SEND_RESPONSE_FLAG_PROCESS_RANGES
Spécifie que pour une demande de plage, le contenu de la réponse complète est passé et que l’appelant souhaite que l’API HTTP traite les plages de manière appropriée.
Note Cet indicateur est uniquement pris en charge pour les réponses aux requêtes HTTP GET et offre un sous-ensemble limité de fonctionnalités. Les applications qui nécessitent un traitement complet doivent l’exécuter en mode utilisateur et ne pas s’appuyer sur HTTP.sys. Son utilisation est déconseillée.
 
Windows Server 2008 R2 et Windows 7 ou version ultérieure.

Note Cet indicateur est pris en charge.

HTTP_SEND_RESPONSE_FLAG_OPAQUE
Spécifie que la requête/réponse n’est pas conforme à HTTP et que tous les octets suivants doivent être traités en tant que corps d’entité. Les applications spécifient cet indicateur lorsqu’elles acceptent une demande de mise à niveau web socket et informent HTTP.sys de traiter les données de connexion comme des données opaques.

Cet indicateur n’est autorisé que lorsque le membre StatusCode de pHttpResponse est 101 et change de protocole. HttpSendHttpResponse retourne ERROR_INVALID_PARAMETER pour tous les autres types de réponse HTTP si cet indicateur est utilisé.

Windows 8 et versions ultérieures : Cet indicateur est pris en charge.

[in] HttpResponse

Pointeur vers une structure HTTP_RESPONSE qui définit la réponse HTTP.

[in, optional] CachePolicy

Pointeur vers la structure HTTP_CACHE_POLICY utilisée pour mettre en cache la réponse.

Windows Server 2003 avec SP1 et Windows XP avec SP2 : Ce paramètre est réservé et doit être NULL.

[out] BytesSent

Optionnel. Pointeur vers une variable qui reçoit le nombre, en octets, envoyé si la fonction fonctionne de manière synchrone.

Lorsque vous effectuez un appel asynchrone à l’aide de pOverlapped, définissez pBytesSent surNULL. Sinon, lorsque pOverlapped a la valeur NULL, pBytesSent doit contenir une adresse mémoire valide et ne pas avoir la valeur NULL.

[in] Reserved1

Ce paramètre est réservé et doit être NULL.

[in] Reserved2

Ce paramètre est réservé et doit être égal à zéro.

[in] Overlapped

Pour les appels asynchrones, définissez pOverlapped pour qu’il pointe vers une structure CHEVAUCHEMENT . pour les appels synchrones, définissez sur NULL.

Un appel synchrone se bloque jusqu’à ce que toutes les données de réponse spécifiées dans le paramètre pHttpResponse soient envoyées , tandis qu’un appel asynchrone retourne immédiatement ERROR_IO_PENDING et que l’application appelante utilise ensuite les ports d’achèvement GetOverlappedResult ou d’E/S pour déterminer quand l’opération est terminée. Pour plus d’informations sur l’utilisation des structures OVERLAPPED pour la synchronisation, consultez Synchronisation et entrée et sortie superposées.

[in, optional] LogData

Pointeur vers la structure HTTP_LOG_DATA utilisée pour journaliser la réponse. Passez un pointeur à la structure HTTP_LOG_FIELDS_DATA et convertissez-le en PHTTP_LOG_DATA.

N’oubliez pas que même lorsque la journalisation est activée sur un groupe d’URL ou une session serveur, la réponse n’est pas journalisée, sauf si l’application fournit la structure des données des champs de journal.

Windows Server 2003 et Windows XP avec SP2 : Ce paramètre est réservé et doit être NULL.

Windows Vista et Windows Server 2008 : Ce paramètre est nouveau pour Windows Vista et Windows Server 2008

Valeur retournée

Si la fonction réussit, la fonction retourne NO_ERROR.

Si la fonction est utilisée de manière asynchrone, une valeur de retour de ERROR_IO_PENDING indique que la requête suivante n’est pas encore prête et qu’elle est récupérée ultérieurement par le biais de mécanismes d’achèvement d’E/S qui se chevauchent normalement.

Si la fonction échoue, elle retourne l’un des codes d’erreur suivants.

Valeur Signification
ERROR_INVALID_PARAMETER
Un ou plusieurs des paramètres fournis sont sous une forme inutilisable.
Autres
Code d’erreur système défini dans WinError.h.

Notes

La fonction HttpSendHttpResponse est utilisée pour créer et envoyer un en-tête de réponse, et la fonction HttpSendResponseEntityBody peut être utilisée pour envoyer des données de corps d’entité en fonction des besoins.

Si ni un en-tête de longueur de contenu ni un en-tête d’encodage de transfert ne sont inclus dans la réponse, l’application doit indiquer la fin de la réponse en fermant explicitement la connexion à l’aide de l’indicateur HTTP_SEND_RESPONSE_DISCONNECT .

Si une application spécifie un en-tête « Server: » dans une réponse, à l’aide de l’identificateur HttpHeaderServer dans la structure HTTP_KNOWN_HEADER , cette valeur spécifiée est placée dans la première partie de l’en-tête, suivie d’un espace, puis de « Microsoft-HTTPAPI/1.0 ». Si aucun en-tête de serveur n’est spécifié, HttpSendHttpResponse fournit « Microsoft-HTTPAPI/1.0 » comme en-tête de serveur.

Note Les fonctions HttpSendHttpResponse et HttpSendResponseEntityBody ne doivent pas être appelées simultanément à partir de différents threads sur le même RequestId.
 

Configuration requise

   
Client minimal pris en charge Windows Vista, Windows XP avec SP2 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête http.h
Bibliothèque Httpapi.lib
DLL Httpapi.dll

Voir aussi

Fonctions de l’API serveur HTTP version 1.0

HTTP_RESPONSE

HttpReceiveHttpRequest

HttpReceiveRequestEntityBody

HttpSendResponseEntityBody