Condividi tramite


Funzione HttpSendResponseEntityBody (http.h)

La funzione HttpSendResponseEntityBody invia i dati del corpo dell'entità associati a una risposta HTTP.

Sintassi

HTTPAPI_LINKAGE ULONG HttpSendResponseEntityBody(
  [in]           HANDLE           RequestQueueHandle,
  [in]           HTTP_REQUEST_ID  RequestId,
  [in]           ULONG            Flags,
  [in]           USHORT           EntityChunkCount,
  [in]           PHTTP_DATA_CHUNK EntityChunks,
  [out]          PULONG           BytesSent,
  [in]           PVOID            Reserved1,
  [in]           ULONG            Reserved2,
  [in]           LPOVERLAPPED     Overlapped,
  [in, optional] PHTTP_LOG_DATA   LogData
);

Parametri

[in] RequestQueueHandle

Handle per la coda di richieste da cui è stata recuperata la richiesta specificata. Viene creata una coda di richieste e il relativo handle restituito da una chiamata alla funzione HttpCreateRequestQueue .

Windows Server 2003 con SP1 e Windows XP con SP2: L'handle per la coda di richieste viene creato dalla funzione HttpCreateHttpHandle .

[in] RequestId

Identificatore della richiesta HTTP a cui corrisponde la risposta. Questo valore viene restituito nel membro RequestId della struttura HTTP_REQUEST tramite una chiamata alla funzione HttpReceiveHttpRequest . Non può essere HTTP_NULL_ID.

[in] Flags

Parametro che può includere uno dei seguenti valori di flag che si escludono a vicenda.

Flags Significato
HTTP_SEND_RESPONSE_FLAG_DISCONNECT
La connessione di rete deve essere disconnessa dopo l'invio di questa risposta, ignorando tutte le funzionalità di connessione persistenti associate alla versione di HTTP in uso. Le applicazioni devono usare questo flag per indicare la fine dell'entità nei casi in cui non viene usata né la lunghezza del contenuto né la codifica in blocchi.
HTTP_SEND_RESPONSE_FLAG_MORE_DATA
I dati aggiuntivi del corpo dell'entità per questa risposta vengono inviati dall'applicazione tramite una o più chiamate successive a HttpSendResponseEntityBody. L'ultima chiamata imposta quindi questo flag su zero.
HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA
Questo flag abilita il buffer dei dati nel kernel in base alla risposta.

Deve essere usato da un'applicazione che esegue operazioni di I/O sincrone o da un'applicazione che esegue operazioni di I/O asincrone senza più di un invio in sospeso alla volta.

Le applicazioni che usano operazioni di I/O asincrone che possono avere più di un invio in sospeso alla volta non devono usare questo flag.

Quando questo flag è impostato, deve essere usato in modo coerente nelle chiamate alla funzione HttpSendHttpResponse .

Windows Server 2003: Questo flag non è supportato. Questo flag è una novità per Windows Server 2003 con SP1.

HTTP_SEND_RESPONSE_FLAG_ENABLE_NAGLING
Abilita l'algoritmo TCP nagling solo per questo invio.

Windows Vista e versioni successive: Questo flag non è supportato.

HTTP_SEND_RESPONSE_FLAG_PROCESS_RANGES
Specifica che per una richiesta di intervallo, il contenuto completo della risposta viene passato e il chiamante vuole che l'API HTTP elabori gli intervalli in modo appropriato.
Nota Questo flag è supportato solo per le risposte alle richieste HTTP GET e offre un subset limitato di funzionalità. Le applicazioni che richiedono l'elaborazione completa devono eseguirla in modalità utente e non basarsi su HTTP.sys. È sconsigliato l'utilizzo.
 
Windows Server 2008 R2 e Windows 7 o versione successiva.

Nota Questo flag è supportato.

HTTP_SEND_RESPONSE_FLAG_OPAQUE
Specifica che la richiesta/risposta non è conforme a HTTP e che tutti i byte successivi devono essere considerati come corpo dell'entità. Le applicazioni specificano questo flag quando accettano una richiesta di aggiornamento di Web Socket e informano HTTP.sys di trattare i dati di connessione come dati opachi.

Questo flag è consentito solo quando il membro StatusCode di pHttpResponse è 101, il passaggio dei protocolli. HttpSendResponseEntityBody restituisceERROR_INVALID_PARAMETER per tutti gli altri tipi di risposta HTTP se viene usato questo flag.

Windows 8 e versioni successive: questo flag è supportato.

 
Attenzione La combinazione di entrambi i flag in una singola chiamata alla funzione HttpSendHttpResponse produce risultati non definiti.
 

[in] EntityChunkCount

Numero di strutture nella matrice a cui punta pEntityChunks. Questo conteggio non può superare il 9999.

[in] EntityChunks

Puntatore a una matrice di strutture HTTP_DATA_CHUNK da inviare come dati del corpo dell'entità.

[out] BytesSent

facoltativo. Puntatore a una variabile che riceve il numero, in byte, inviato se la funzione opera in modo sincrono.

Quando si effettua una chiamata asincrona tramite pOverlapped, impostare pBytesSent su NULL. In caso contrario, quando pOverlapped è impostato su NULL, pBytesSent deve contenere un indirizzo di memoria valido e non essere impostato su NULL.

[in] Reserved1

Questo parametro è riservato e deve essere NULL.

[in] Reserved2

Questo parametro è riservato e deve essere zero.

[in] Overlapped

Per le chiamate asincrone, impostare pOverlapped in modo che punti a una struttura OVERLAPPED ; per le chiamate sincrone, impostarlo su NULL.

Una chiamata sincrona si blocca finché non vengono inviati tutti i dati di risposta specificati nel parametro pEntityChunks , mentre una chiamata asincrona restituisce immediatamente ERROR_IO_PENDING e l'applicazione chiamante usa quindi le porte di completamento GetOverlappedResult o I/O per determinare quando l'operazione viene completata. Per altre informazioni sull'uso di strutture OVERLAPPED per la sincronizzazione, vedere Sincronizzazione e input e output sovrapposti.

[in, optional] LogData

Puntatore alla struttura HTTP_LOG_DATA utilizzata per registrare la risposta. Passare un puntatore alla struttura HTTP_LOG_FIELDS_DATA ed eseguirne il cast in PHTTP_LOG_DATA.

Tenere presente che, anche quando la registrazione è abilitata in un gruppo di URL o in una sessione server, la risposta non verrà registrata a meno che l'applicazione non fornisca la struttura dei dati dei campi di log.

Windows Server 2003 e Windows XP con SP2: Questo parametro è riservato e deve essere NULL.

Windows Vista e Windows Server 2008: Questo parametro è una novità per Windows Vista e Windows Server 2008

Valore restituito

Se la funzione ha esito positivo, il valore restituito viene NO_ERROR.

Se la funzione viene usata in modo asincrono, un valore restituito di ERROR_IO_PENDING indica che la richiesta successiva non è ancora pronta e viene recuperata in un secondo momento tramite normali meccanismi di completamento di I/O sovrapposti.

Se la funzione ha esito negativo, il valore restituito è uno dei codici di errore seguenti.

Valore Significato
ERROR_INVALID_PARAMETER
Uno o più parametri forniti sono in formato inutilizzabile.
ERROR_BAD_COMMAND
È presente una chiamata in sospeso a HttpSendHttpResponse o HttpSendResponseEntityBody con lo stesso RequestId.
Altri
Codice di errore di sistema definito in WinError.h.

Commenti

Se nelle intestazioni di risposta non è inclusa né un'intestazione Content-length né un'intestazione transfer-encoding, l'applicazione deve indicare la fine della risposta chiudendo in modo esplicito la connessione usando il flag HTTP_SEND_RESPONSE_DISCONNECT .

NotaHttpSendResponseEntityBody (o HttpSendHttpResponse) e HttpSendResponseEntityBody non devono essere chiamati contemporaneamente da thread diversi nello stesso RequestId.
 

Requisiti

Requisito Valore
Client minimo supportato Windows Vista, Windows XP con SP2 [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione http.h
Libreria Httpapi.lib
DLL Httpapi.dll

Vedi anche

Funzioni dell'API server HTTP versione 1.0

HTTP_DATA_CHUNK

HttpReceiveHttpRequest

HttpReceiveRequestEntityBody

HttpSendHttpResponse