Übersicht über die HTTP-Server-API
In der folgenden Liste ist eine typische Abfolge von Vorgängen aufgeführt, die die HTTP-Server-API verwenden:
- Initialisieren Sie die HTTP-Server-API mithilfe der HttpInitialize-Funktion.
- Erstellen Sie mithilfe der HttpCreateHttpHandle-Funktion eine Anforderungswarteschlange.
- Registrieren Sie eine oder mehrere URLs mithilfe der HttpAddUrl-Funktion.
- Empfangen Sie eingehende Anforderungen, die mithilfe der HttpReceiveHttpRequest-Funktion an registrierte URLs geleitet werden, und senden Sie HTTP-Antworten für diese Anforderungen mithilfe der HttpSendHttpResponse-Funktion.
- (Optional) Wenn Sie eine Antwort senden, senden Sie mithilfe der HttpSendResponseEntityBody-Funktion einen zusätzlichen Entitätskörper.
- Führen Sie Bereinigungsvorgänge mithilfe der Funktionen HttpRemoveUrl, CloseHandle und HttpTerminate aus.
Beachten Sie bei Vorgängen, die URLs verwenden, dass es sich um die verarbeitete URL handelt, die im Vorurl-Member der HTTP REQUEST _ _ V1-Struktur enthalten ist, die verwendet werden soll. Verwenden Sie nicht die nicht verarbeitete URL im pRawUrl-Member, die ausschließlich zu Nachverfolgungs- und statistischen Zwecken dient.
Jede Anwendung erstellt eine eigene Anforderungswarteschlange. Eine Anwendung erhält ihr Anforderungswarteschlangenhandle von HttpCreateHttpHandle. Dieses Handle wird an die HttpAddUrl-Funktion übergeben, um der Anforderungswarteschlange eine URL hinzuzufügen. Die Anwendung empfängt eine Benachrichtigung über eine eingehende Anforderung und ruft sie aus der Anforderungswarteschlange ab, indem sie die HttpReceiveHttpRequest-Funktion mit dem Anforderungswarteschlangenhand handle aufruft. Sie können diese Funktion verwenden, um entweder die Anforderungsheader oder die Header und den Entitätskörper zu empfangen. HttpReceiveHttpRequest gibt auch einen Anforderungsbezeichner (RequestId) für die empfangene Anforderung zurück, der für das Anforderungshandle eindeutig ist.
Hinweis
Es liegt in der Verantwortung der Anwendung, alle relevanten Anforderungsheader zu untersuchen, einschließlich Inhaltsaushandlungsheader, wenn sie verwendet werden, und Anforderungen je nach Inhalt des Headers zu fehlschlagen. Die HTTP-Server-API stellt nur sicher, dass jede Headerzeile ordnungsgemäß beendet wird und keine unzulässigen Zeichen enthält.
Verwenden Sie die HttpReceiveRequestEntityBody-Funktion mit dem Handle für die Anforderungswarteschlange, um nachfolgende Teile des Entitätskörpers einer Anforderung abzurufen(sofern verfügbar).
Hinweis
Die HTTP-Server-API decodiert blockierte Nachrichten auf der Empfangsseite, führt jedoch keine blockierte Codierung auf der Sendeseite aus. Wenn blocking auf der Sendeseite erforderlich ist, muss die Anwendung sie implementieren. Weitere Informationen zur blockierten Codierung finden Sie unter RFC 2616.
Verwenden Sie die HttpReceiveClientCertificate-Funktion mit Anwendungen, die URLs mithilfe eines sicheren Schemas ("https") bedienen, um optional die Zertifikatinformationen des Clients abzurufen.
Antworten werden mit der HttpSendHttpResponse-Funktion gesendet. Diese Funktion verwendet die RequestId aus der entsprechenden Anforderung, um die Antwort zu senden. Eine Antwort kann im Laufe der Zeit in mehreren API-Aufrufen gesendet werden, indem die HttpSendResponseEntityBody-Funktion mit der RequestId aus der ursprünglich empfangenen Anforderung aufruft.
Hinweis
Standardmäßig verwendet HttpSendHttpResponse "Microsoft-HTTPAPI/1.0" als "Server:"-Header. Wenn eine Anwendung einen Serverheader in einer Antwort angibt, wird dieser Wert als erster Teil des Serverheader platziert, gefolgt von einem Leerzeichen und dann "Microsoft-HTTPAPI/1.0".
Im Allgemeinen blendet die HTTP-Server-API Details zur Verbindungsverwaltung und deren Einrichtung und Abbruch von Anwendungen aus. Eine Anwendung kann jedoch optional die Beendigung einer Verbindung erkennen, indem sie HttpWaitForDisconnect aufruft.
Anwendungen müssen mithilfe der folgenden Schritte bereinigt werden:
- Wenn die Anwendung keine URL abhört oder darauf reagiert, wird die URL mithilfe der HttpRemoveURL-Funktion entfernt.
- Wenn die Anwendung die Anforderungswarteschlange nicht mehr verwendet, schließen Sie das Anforderungswarteschlangenhandle mithilfe der CloseHandle-Funktion.
- Wenn die Anwendung die VERWENDUNG der HTTP-Server-API abgeschlossen hat, rufen Sie die HttpTerminate-Funktion auf.