Delen via


ACHTERNET-ingangen in WinHTTP

Microsoft Windows HTTP Services (WinHTTP) gebruikt ingangen om instellingen en informatie bij te houden die vereist zijn bij het gebruik van het HTTP-protocol. Elke ingang onderhoudt informatie die relevant is voor een HTTP-sessie, een verbinding met een HTTP-server of een specifieke resource. In dit onderwerp worden de verschillende typen ingangen, de naamconventies voor deze ingangen en hun hiërarchische structuur beschreven.

Over ACHTERNET-ingangen

De ingangen die door WinHTTP worden gemaakt en gebruikt, worden ACHTERNET ingangen genoemd. De WinHTTP-functies retourneren ACHTERNET- ingangen die niet kunnen worden uitgewisseld met andere ingangen, zodat ze niet kunnen worden gebruikt met functies zoals ReadFile- of CloseHandle-. Op dezelfde manier kunnen andere ingangen niet worden gebruikt met WinHTTP-functies. Een ingang die wordt geretourneerd door CreateFile- kan bijvoorbeeld niet worden doorgegeven aan WinHttpReadData-. Deze ACHTERNET- ingangen kunnen niet worden gesloten terwijl er een API-aanroep wordt uitgevoerd met behulp van de ingang. Om een racevoorwaarde te voorkomen, moeten toepassingen de ingang beveiligen en voorkomen dat deze wordt gesloten zolang de API-aanroep wordt uitgevoerd.

Microsoft Win32 Internet -functies (WinInet) maken ook gebruik van ACHTERNET ingangen. De ingangen die worden gebruikt in WinInet-functies kunnen echter niet worden uitgewisseld met de ingangen die worden gebruikt in WinHTTP-functies. Zie Over WinINetvoor meer informatie over WinInet.

De functie WinHttpCloseHandle sluit WinHTTP ACHTERNET ingangen.

Naamgevingsgrepen

In de WinHTTP-documentatie tonen beschrijvingen van functies in de API (Application Programming Interface) en voorbeeldcode het maken en gebruiken van verschillende typen ACHTERNET ingangen. De naamgeving van deze ingangen is consistent om de verschillende typen ingangen bij te houden. In de volgende tabel ziet u de id's die volgens conventie worden gebruikt in de documentatie.

Type ingang Greep voor het maken van functies Id
Algemene ingang WinHttpOpen, WinHttpConnectof WinHttpOpenRequest hInternet
Sessiehandgreep WinHttpOpen- hSession
Verbindingsgreep WinHttpConnect- hConnect
Aanvraaghandgreep WinHttpOpenRequest hRequest
Web Socket-ingang WinHttpWebSocketCompleteUpgrade- hWebSocket

Hiërarchie afhandelen

De ACHTERNET- ingangen worden in een hiërarchie bijgehouden. De ingang die wordt geretourneerd door WinHttpOpen is de sessie ACHTERNET ingang. Het aanroepen van WinHttpOpen initialiseert de WinHTTP-functies en begint een sessiecontext die gedurende de hele levensduur van de sessiehandgreep gebruikersgegevens en -instellingen onderhoudt. WinHttpConnect- geeft een HTTP- of HTTPS-doelserver op en maakt een verbinding ACHTERNET ingang. De verbindingsgreep neemt standaard de instellingen voor de sessiehandgreep over. Aan elke resource die is opgegeven met een aanroep van WinHttpOpenRequest-, wordt een aanvraag toegewezen ACHTERNET ingang.

In het volgende diagram ziet u de hiërarchie van ACHTERNET ingangen. Elk vak in het diagram vertegenwoordigt een WinHTTP-functie die een ACHTERNET retourneert ingang.

functies die ingangen maken

Nadat u een ingang hebt gesloten, moet de toepassing zijn voorbereid op het ontvangen van callbackmeldingen op de ingang totdat de laatste WINHTTP_CALLBACK_STATUS_HANDLE_CLOSED waarde wordt geretourneerd om aan te geven dat de ingang volledig is gesloten (of totdat de toepassing een eigen equivalente synchronisatie uitvoert, zoals het bijhouden en wachten op callbacks van asynchrone bewerkingen en ervoor te zorgen dat er geen verdere bewerkingen worden uitgevoerd met behulp van die ingang).

Een sessie-handle wordt aangeduid als de bovenliggende van een verbindingsgreep die wordt gebruikt om te maken; op dezelfde manier worden zowel de verbindingsgreep als de bovenliggende sessie-handle aangeduid als bovenliggende bovenliggende aanvragen die door de verbindingsgreep worden gebruikt om te maken.

Wanneer een bovenliggende ingang wordt gesloten, worden alle onderliggende items die het heeft indirect ongeldig gemaakt, zelfs als deze niet zelf zijn gesloten en eventuele aanvragen die deze gebruiken, mislukken met de fout ERROR_INVALID_HANDLE. In behandeling zijnde asynchrone aanvragen kunnen niet worden vertrouwd om correct te worden voltooid.

In het volgende diagram ziet u de functies die gebruikmaken van de ACHTERNET- ingang die is gemaakt door WinHttpOpenRequest. De gearceerde vakken vertegenwoordigen WinHTTP-functies die ingangen maken en de vakken zonder opmaak tonen de functies die gebruikmaken van die ACHTERNET ingangen. Het diagram is ook geordend om de volgorde weer te geven waarin WinHTTP-functies normaal gesproken worden aangeroepen.

functies die ingangen maken

Uitleg van de hiërarchie van ingangen

Eerst wordt er een sessiehandgreep gemaakt met WinHttpOpen. WinHttpConnect- vereist de sessiehandgreep als eerste parameter en retourneert een verbindingsgreep voor een opgegeven server. Er wordt een aanvraaggreep gemaakt door WinHttpOpenRequest-, die gebruikmaakt van de verbindingsgreep die is gemaakt door WinHttpConnect-. Als de toepassing ervoor kiest om extra headers toe te voegen aan de aanvraag of als het nodig is voor de toepassing om referenties in te stellen voor verificatie, kan WinHttpAddRequestHeaders en WinHttpSetCredentials worden aangeroepen met behulp van deze aanvraaghandler. De aanvraag wordt verzonden door WinHttpSendRequest, die gebruikmaakt van de aanvraaghandler. Nadat de aanvraag is verzonden, kunnen extra gegevens naar de server worden verzonden met behulp van WinHttpWriteData. De toepassing kan ook rechtstreeks naar WinHttpReceiveResponse- gaan om op te geven dat er geen informatie meer naar de server wordt verzonden. Afhankelijk van het doel van de toepassing kan de aanvraagingsgreep worden gebruikt om WinHttpQueryHeadersaan te roepen, WinHttpQueryAuthSchemesof om een resource op te halen met WinHttpQueryDataAvailable en WinHttpReadData-.

Websockets in de greephiërarchie

Een websocketgreep neemt over van de verbindings- en sessiegrepen en neemt een vergelijkbare positie in de handlehiërarchie in beslag als een aanvraaghandgreep. Als u een websocket-handle wilt maken, moet er een aanvraagingang bestaan; maar zodra de websocketgreep is gemaakt, kan de aanvraag worden gesloten en blijft de websocketgreep functioneren.