Omówienie interfejsu API serwera HTTP

Poniższa lista identyfikuje typową sekwencję operacji korzystających z interfejsu API serwera HTTP:

W operacjach korzystających z adresów URL należy pamiętać, że przetworzony adres URL zawarty w elemencie członkowskim CookedUrl struktury HTTP_REQUEST_V1 powinien być używany. Nie należy używać nieprzetworzonego adresu URL w elemencie członkowskim pRawUrl, który służy wyłącznie do celów śledzenia i statystyk.

Każda aplikacja tworzy własną kolejkę żądań. Aplikacja uzyskuje dojście do kolejki żądań z HttpCreateHttpHandle. Przekazuje ten uchwyt do funkcji HttpAddUrl, aby dodać adres URL do kolejki żądań. Aplikacja odbiera powiadomienie o żądaniu przychodzącym i pobiera je z kolejki żądań, wywołując funkcję HttpReceiveHttpRequest z uchwytem kolejki żądań. Za pomocą tej funkcji można odbierać nagłówki żądania lub zarówno nagłówki, jak i treść jednostki. httpReceiveHttpRequest również zwraca identyfikator żądania (RequestId) dla odebranego żądania, który jest unikatowy dla dojścia żądania.

Notatka

Aplikacja jest odpowiedzialna za sprawdzanie wszystkich odpowiednich nagłówków żądań, w tym nagłówków negocjacji zawartości, o ile są używane, oraz za odrzucanie żądań odpowiednio do zawartości nagłówka. Interfejs API serwera HTTP zapewnia tylko prawidłowe zakończenie każdego wiersza nagłówka i nie zawiera niedozwolonych znaków.

 

Użyj funkcji HttpReceiveRequestEntityBody z dojściem kolejki żądań, aby pobrać kolejne części treści jednostki żądania, jeśli takie istnieją.

Notatka

Interfejs API serwera HTTP dekoduje fragmentowane komunikaty po stronie odbierania, ale nie wykonuje kodowania fragmentowanego po stronie wysyłania. Jeśli fragmentowanie jest wymagane po stronie wysyłania, aplikacja musi ją zaimplementować. Aby uzyskać więcej informacji na temat kodowania fragmentowanego, zobacz RFC 2616.

 

Użyj funkcji HttpReceiveClientCertificate z aplikacjami obsługującymi adresy URL przy użyciu bezpiecznego schematu ("https"), aby opcjonalnie pobrać informacje o certyfikacie klienta.

Odpowiedzi są wysyłane za pomocą funkcji HttpSendHttpResponse. Ta funkcja używa identyfikatora RequestId z odpowiedniego żądania, aby wysłać odpowiedź. Odpowiedź można wysłać w kilku wywołaniach interfejsu API, wykonując funkcję HttpSendResponseEntityBody z identyfikatorem RequestId pobranym z pierwotnie odebranego żądania.

Notatka

Domyślnie HttpSendHttpResponse używa "Microsoft-HTTPAPI/1.0" jako nagłówka "Server:". Jeśli aplikacja określa nagłówek serwera w odpowiedzi, ta wartość jest umieszczana jako pierwsza część nagłówka serwera, po czym następuje spacja, a następnie "Microsoft-HTTPAPI/1.0".

 

Ogólnie rzecz biorąc, interfejs API serwera HTTP ukrywa szczegóły zarządzania połączeniami oraz ich ustanowienia i usuwania z aplikacji. Jednak aplikacja może opcjonalnie wykryć zakończenie połączenia, wywołując HttpWaitForDisconnect.

Aplikacje muszą się oczyścić, wykonując następujące kroki:

  • Gdy aplikacja nie nasłuchuje lub nie odpowiada na adres URL, adres URL zostanie usunięty przy użyciu funkcji HttpRemoveURL.
  • Po zakończeniu korzystania z kolejki żądań zamknij dojście kolejki żądań przy użyciu funkcji CloseHandle.
  • Po zakończeniu korzystania z interfejsu API serwera HTTP, wywołaj funkcję HttpTerminate.