HttpSendHttpResponse-Funktion (http.h)

Die HttpSendHttpResponse-Funktion sendet eine HTTP-Antwort an die angegebene HTTP-Anforderung.

Syntax

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

Parameter

[in] RequestQueueHandle

Ein Handle für die Anforderungswarteschlange, aus der die angegebene Anforderung abgerufen wurde. Eine Anforderungswarteschlange wird erstellt, und ihr Handle wird durch einen Aufruf der HttpCreateRequestQueue-Funktion zurückgegeben.

Windows Server 2003 mit SP1 und Windows XP mit SP2: Das Handle für die Anforderungswarteschlange wird von der HttpCreateHttpHandle-Funktion erstellt.

[in] RequestId

Ein Bezeichner der HTTP-Anforderung, der diese Antwort entspricht. Dieser Wert wird im RequestId-Member der HTTP_REQUEST-Struktur durch einen Aufruf der HttpReceiveHttpRequest-Funktion zurückgegeben. Dieser Wert kann nicht HTTP_NULL_ID werden.

[in] Flags

Dieser Parameter kann eine Kombination aus einigen der folgenden Flagwerte sein. Diejenigen, die sich gegenseitig ausschließen, werden entsprechend gekennzeichnet.

Flags Bedeutung
HTTP_SEND_RESPONSE_FLAG_DISCONNECT
Die Netzwerkverbindung sollte nach dem Senden dieser Antwort getrennt werden, wobei alle features für persistente Verbindungen überschrieben werden, die der verwendeten HTTP-Version zugeordnet sind.
Vorsicht Die Kombination von HTTP_SEND_RESPONSE_FLAG_DISCONNECT und HTTP_SEND_RESPONSE_FLAG_MORE_DATA in einem einzelnen Aufruf der HttpSendHttpResponse-Funktion führt zu nicht definierten Ergebnissen.
 
HTTP_SEND_RESPONSE_FLAG_MORE_DATA
Zusätzliche Entitätstextdaten für diese Antwort werden von der Anwendung über einen oder mehrere nachfolgende Aufrufe von HttpSendResponseEntityBody gesendet. Beim letzten Aufruf, der Entitätskörperdaten sendet, wird dieses Flag dann auf 0 festgelegt.
Vorsicht Die Kombination von HTTP_SEND_RESPONSE_FLAG_DISCONNECT und HTTP_SEND_RESPONSE_FLAG_MORE_DATA in einem einzelnen Aufruf der HttpSendHttpResponse-Funktion führt zu nicht definierten Ergebnissen.
 
HTTP_SEND_RESPONSE_FLAG_BUFFER_DATA
Dieses Flag ermöglicht das Puffern von Daten im Kernel auf Antwortbasis.

Sie sollte von einer Anwendung verwendet werden, die synchrone E/A-Vorgänge ausführt, oder von einer Anwendung, die asynchrone E/A-Vorgänge mit jeweils nicht mehr als einem ausstehenden Sendevorgang ausführt.

Anwendungen, die asynchrone E/A-Vorgänge verwenden und die möglicherweise mehrere ausstehende Sendevorgänge gleichzeitig aufweisen, sollten dieses Flag nicht verwenden.

Wenn dieses Flag festgelegt ist, sollte es auch konsistent in Aufrufen der HttpSendResponseEntityBody-Funktion verwendet werden.

Windows Server 2003: Dieses Flag wird nicht unterstützt. Dieses Flag ist neu für Windows Server 2003 mit SP1.

HTTP_SEND_RESPONSE_FLAG_ENABLE_NAGLING
Aktiviert den TCP-Nagling-Algorithmus nur für diesen Sendevorgang.

Windows Server 2003 mit SP1 und Windows XP mit SP2: Dieses Flag wird nicht unterstützt.

HTTP_SEND_RESPONSE_FLAG_PROCESS_RANGES
Gibt an, dass für eine Bereichsanforderung der vollständige Antwortinhalt übergeben wird und der Aufrufer möchte, dass die HTTP-API Bereiche entsprechend verarbeitet.
Hinweis Dieses Flag wird nur für Antworten auf HTTP GET-Anforderungen unterstützt und bietet eine begrenzte Teilmenge von Funktionen. Anwendungen, die eine Vollständige Bereichsverarbeitung erfordern, sollten diese im Benutzermodus ausführen und sich nicht auf HTTP.sys verlassen. Von der Verwendung wird abgeraten.
 
Windows Server 2008 R2 und Windows 7 oder höher.

Hinweis Dieses Flag wird unterstützt.

HTTP_SEND_RESPONSE_FLAG_OPAQUE
Gibt an, dass die Anforderung/Antwort nicht HTTP-konform ist und alle nachfolgenden Bytes als Entitätstext behandelt werden sollen. Anwendungen geben dieses Flag an, wenn sie eine Web Socket-Upgradeanforderung akzeptiert und HTTP.sys informiert, die Verbindungsdaten als undurchsichtige Daten zu behandeln.

Dieses Flag ist nur zulässig, wenn das StatusCode-Element von pHttpResponse101 ist und protokolle wechselt. HttpSendHttpResponse gibt ERROR_INVALID_PARAMETER für alle anderen HTTP-Antworttypen zurück, wenn dieses Flag verwendet wird.

Windows 8 und höher: Dieses Flag wird unterstützt.

[in] HttpResponse

Ein Zeiger auf eine HTTP_RESPONSE-Struktur , die die HTTP-Antwort definiert.

[in, optional] CachePolicy

Ein Zeiger auf die HTTP_CACHE_POLICY Struktur, die zum Zwischenspeichern der Antwort verwendet wird.

Windows Server 2003 mit SP1 und Windows XP mit SP2: Dieser Parameter ist reserviert und muss NULL sein.

[out] BytesSent

Optional. Ein Zeiger auf eine Variable, die die Zahl in Bytes empfängt, die gesendet wird, wenn die Funktion synchron arbeitet.

Legen Sie bei einem asynchronen Aufruf mit pOverlappedpBytesSent auf NULL fest. Andernfalls muss pBytesSent eine gültige Speicheradresse enthalten und nicht auf NULL festgelegt werden, wenn pOverlapped auf NULL festgelegt ist.

[in] Reserved1

Dieser Parameter ist reserviert und muss NULL sein.

[in] Reserved2

Dieser Parameter ist reserviert und muss null sein.

[in] Overlapped

Legen Sie bei asynchronen Aufrufen pOverlapped so fest, dass er auf eine OVERLAPPED-Struktur verweist. Legen Sie für synchrone Aufrufe auf NULL fest.

Ein synchroner Aufruf blockiert, bis alle im pHttpResponse-Parameter angegebenen Antwortdaten gesendet werden, während ein asynchroner Aufruf sofort ERROR_IO_PENDING zurückgibt und die aufrufende Anwendung dann GetOverlappedResult - oder E/A-Vervollständigungsports verwendet, um zu bestimmen, wann der Vorgang abgeschlossen ist. Weitere Informationen zur Verwendung von OVERLAPPED-Strukturen für die Synchronisierung finden Sie unter Synchronisierung und überlappende Eingabe und Ausgabe.

[in, optional] LogData

Ein Zeiger auf die HTTP_LOG_DATA Struktur, die zum Protokollieren der Antwort verwendet wird. Übergeben Sie einen Zeiger an die HTTP_LOG_FIELDS_DATA-Struktur , und wandeln Sie ihn in PHTTP_LOG_DATA um.

Beachten Sie, dass selbst wenn die Protokollierung für eine URL-Gruppe oder Serversitzung aktiviert ist, die Antwort nur protokolliert wird, wenn die Anwendung die Datenstruktur der Protokollfelder bereitstellt.

Windows Server 2003 und Windows XP mit SP2: Dieser Parameter ist reserviert und muss NULL sein.

Windows Vista und Windows Server 2008: Dieser Parameter ist neu für Windows Vista und Windows Server 2008.

Rückgabewert

Wenn die Funktion erfolgreich ist, gibt die Funktion NO_ERROR zurück.

Wenn die Funktion asynchron verwendet wird, gibt der Rückgabewert ERROR_IO_PENDING an, dass die nächste Anforderung noch nicht bereit ist und später über normale überlappende E/A-Vervollständigungsmechanismen abgerufen wird.

Wenn die Funktion fehlschlägt, gibt sie einen der folgenden Fehlercodes zurück.

Wert Bedeutung
ERROR_INVALID_PARAMETER
Mindestens einer der angegebenen Parameter ist in einer nicht verwendbaren Form.
Andere
Ein in WinError.h definierter Systemfehlercode .

Hinweise

Die HttpSendHttpResponse-Funktion wird verwendet, um einen Antwortheader zu erstellen und zu senden, und die HttpSendResponseEntityBody-Funktion kann verwendet werden, um Entitätskörperdaten nach Bedarf zu senden.

Wenn weder ein Header mit Inhaltslänge noch ein Transfercodierungsheader in der Antwort enthalten ist, muss die Anwendung das Ende der Antwort angeben, indem die Verbindung mithilfe des flags HTTP_SEND_RESPONSE_DISCONNECT explizit geschlossen wird.

Wenn eine Anwendung einen "Server:"-Header in einer Antwort angibt und den HttpHeaderServer-Bezeichner in der HTTP_KNOWN_HEADER-Struktur verwendet, wird dieser angegebene Wert als erster Teil des Headers platziert, gefolgt von einem Leerzeichen und dann "Microsoft-HTTPAPI/1.0". Wenn kein Serverheader angegeben ist, stellt HttpSendHttpResponse als Serverheader "Microsoft-HTTPAPI/1.0" bereit.

Hinweis Die Funktionen HttpSendHttpResponse und HttpSendResponseEntityBody dürfen nicht gleichzeitig aus verschiedenen Threads auf derselben RequestId aufgerufen werden.
 

Anforderungen

   
Unterstützte Mindestversion (Client) Windows Vista, Windows XP mit SP2 [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile http.h
Bibliothek Httpapi.lib
DLL Httpapi.dll

Weitere Informationen

Funktionen der HTTP-Server-API, Version 1.0

HTTP_RESPONSE

HttpReceiveHttpRequest

HttpReceiveRequestEntityBody

HttpSendResponseEntityBody