Foutlogboekregistratie in HTTP-API's

In dit artikel worden de mogelijkheden voor foutregistratie van HTTP-api's (Application Programming Interfaces) van HyperText Transfer Protocol beschreven.

Oorspronkelijke productversie: Windows Server 2008 R2, Windows Server 2008, Windows Server 2012 R2, Windows Server 2012, Windows 10, Windows 8.1
Origineel KB-nummer: 820729

Samenvatting

Sommige fouten die optreden in een HTTP-toepassing, worden automatisch verwerkt door de HTTP-API in plaats van dat ze worden doorgestuurd naar een toepassing voor verwerking. Dit gedrag treedt op omdat de frequentie van dergelijke fouten anders een gebeurtenislogboek of een toepassingshandler kan overspoelen.

In de volgende onderwerpen worden de verschillende aspecten van http-API-foutenlogboeken beschreven.

  • HTTP-API-foutlogboeken configureren
    Registerinstellingen bepalen de HTTP API-logboekfouten, de maximaal toegestane grootte van logboekbestanden en de locatie van de logboekbestanden.

  • Indeling van de HTTP-API-foutenlogboeken
    De HTTP-API maakt logboekbestanden die voldoen aan de logboekconventies van het W3C-logboek (World Wide Web Consortium). U kunt standaardhulpprogramma's gebruiken om deze logboekbestanden te parseren. In tegenstelling tot W3C-logboekbestanden bevatten HTTP-API-logboekbestanden echter niet de namen van kolommen.

  • Soorten fouten die door de HTTP-API worden opgeslagen
    De HTTP-API registreert veel veelvoorkomende fouten.

De volgende methoden beschrijven de oplossing van http-API-foutenlogboekregistratie.

HTTP-API-foutlogboeken configureren

Drie registerwaarden onder een HTTP\Parameters-sleutel bepalen de HTTP-API-foutlogboeken. Deze sleutels bevinden zich op de registersleutel: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters.

Opmerking

De locatie en de vorm van de configuratiewaarden kunnen veranderen in latere versies van het Windows-besturingssysteem.

U moet beheerders-/lokale systeemreferenties hebben om de registerwaarden te wijzigen en om de logboekbestanden en de map met deze logboekbestanden weer te geven of te wijzigen.

Configuratiegegevens in de registerwaarden worden gelezen wanneer het HTTP-API-stuurprogramma wordt gestart. Dus als u de instellingen wijzigt, moet u stoppen en vervolgens het stuurprogramma opnieuw starten om de nieuwe waarden te lezen. Typ hiervoor de volgende consoleopdrachten:

net stop http
net start http

De volgende naamconventie wordt gebruikt om de logboekbestanden een naam te geven:
httperr + volgnummer + .log
Voorbeeld: httperr4.log

Logboekbestanden worden gecyclusd wanneer ze de maximale grootte bereiken die de registerwaarde ErrorLogFileTruncateSize opgeeft. Deze waarde mag niet kleiner zijn dan 1 MEGAbyte (MB).

Als de configuratie van foutlogboekregistratie niet geldig is of als er een fout optreedt terwijl de HTTP-API naar de logboekbestanden schrijft, gebruikt de HTTP-API logboekregistratie om beheerders te informeren dat foutenlogboekregistratie niet optreedt.

In de volgende tabel worden de registerconfiguratiewaarden beschreven.

Registerwaarde Beschrijving
EnableErrorLogging Een DWORD die u kunt instellen op TRUE om foutregistratie in te schakelen of op ONWAAR om het uit te schakelen. De standaardwaarde is TRUE.
ErrorLogFileTruncateSize Een DWORD die de maximale grootte van een foutenlogboekbestand in bytes aangeeft. De standaardwaarde is 1 MB (0x100000).

De opgegeven waarde mag niet kleiner zijn dan de standaardwaarde.
ErrorLoggingDir Een tekenreeks die de map aangeeft waarin de HTTP-API de logboekbestanden plaatst.

De HTTP-API maakt een submap HTTPERR in de opgegeven map en slaat de logboekbestanden vervolgens op in de submap. Deze submap en de logboekbestanden ontvangen dezelfde machtigingsinstellingen. De beheerdersaccounts en lokale systeemaccounts hebben volledige toegang. Andere gebruikers hebben geen toegang.

Het volgende voorbeeld is de standaardmap wanneer de map niet is opgegeven in het register:
%SystemRoot%\System32\LogFiles

De tekenreekswaarde ErrorLoggingDir moet een volledig gekwalificeerd lokaal pad zijn. Het kan echter bevatten %SystemRoot%. Een netwerkstation of netwerkshare kan niet worden gebruikt.

Indeling van de HTTP-API-foutenlogboeken

Over het algemeen hebben HTTP-API-foutenlogboekbestanden dezelfde indeling als W3C-foutenlogboeken, behalve dat HTTP-API-foutlogboekbestanden geen kolomkoppen bevatten. Elke regel van een HTTP-API-foutenlogboek registreert één fout. De velden worden in een specifieke volgorde weergegeven. Eén spatieteken (0x0020) scheidt elk veld van het vorige veld. In elk veld vervangen plustekens (0x002B) spatietekens, tabbladen en niet-afdrukbare besturingstekens.

In de volgende tabel worden de velden en de volgorde van de velden in een foutenlogboekrecord geïdentificeerd.

Veld Beschrijving
Datum Het veld Datum volgt de W3C-indeling. Dit veld is gebaseerd op Coordinated Universal Time (UTC). Het veld Datum is altijd 10 tekens in de vorm van JJJJ-MM-DD. 1 mei 2003 wordt bijvoorbeeld uitgedrukt als 01-05-2003.
Tijd Het veld Tijd volgt de W3C-indeling. Dit veld is gebaseerd op UTC. Het tijdveld bestaat altijd uit acht tekens in de vorm van MM:UU:SS. 17:30 uur (UTC) wordt bijvoorbeeld uitgedrukt als 17:30:00.
IP-adres (Client Internet Protocol) Het IP-adres van de betrokken client. De waarde in dit veld kan een IPv4-adres of een IPv6-adres zijn. Als het IP-adres van de client een IPv6-adres is, wordt het veld ScopeId ook opgenomen in het adres.
Clientpoort Het poortnummer voor de betrokken client.
IP-adres van server Het IP-adres van de betreffende server. De waarde in dit veld kan een IPv4-adres of een IPv6-adres zijn. Als het IP-adres van de server een IPv6-adres is, wordt het veld ScopeId ook opgenomen in het adres.
Serverpoort Het poortnummer van de betreffende server.
Protocolversie De versie van het protocol dat wordt gebruikt.

Als de verbinding niet voldoende is geparseerd om de protocolversie te bepalen, wordt een afbreekstreepje (0x002D) gebruikt als tijdelijke aanduiding voor het lege veld.

Als het primaire versienummer of het secundaire versienummer dat wordt geparseerd groter is dan of gelijk is aan 10, wordt de versie geregistreerd als HTTP/?.?.
Werkwoord Het werkwoord geeft de laatste aanvraag aan die wordt geparseerd. Onbekende werkwoorden worden opgenomen, maar elk werkwoord dat meer dan 255 bytes is, wordt afgekapt tot deze lengte. Als een werkwoord niet beschikbaar is, wordt een afbreekstreepje (0x002D) gebruikt als tijdelijke aanduiding voor het lege veld.
CookedURL + Query De URL en elke query die eraan is gekoppeld, worden geregistreerd als één veld dat wordt gescheiden door een vraagteken (0x3F). Dit veld is afgekapt met een lengtelimiet van 4096 bytes.

Als deze URL is geparseerd ('gekookt'), wordt deze geregistreerd met conversie van lokale codepagina's en wordt deze behandeld als een Unicode-veld.

Als deze URL niet is geparseerd ('gekookt') op het moment van logboekregistratie, wordt deze exact gekopieerd, zonder unicode-conversie.

Als de HTTP-API deze URL niet kan parseren, wordt een afbreekstreepje (0x002D) gebruikt als tijdelijke aanduiding voor het lege veld.
Protocolstatus De protocolstatus mag niet groter zijn dan 999.

Als de protocolstatus van het antwoord op een aanvraag beschikbaar is, wordt deze vastgelegd in dit veld.

Als de protocolstatus niet beschikbaar is, wordt een afbreekstreepje (0x002D) gebruikt als tijdelijke aanduiding voor het lege veld.
SiteId Niet gebruikt in deze versie van de HTTP-API. In dit veld wordt altijd een tijdelijke aanduiding (0x002D) weergegeven.
Redenzin Dit veld bevat een tekenreeks die het type fout aangeeft dat wordt geregistreerd. Dit veld wordt nooit leeg gelaten.
Wachtrijnaam Dit is de naam van de aanvraagwachtrij.

De volgende voorbeeldregels zijn afkomstig uit een HTTP-API-foutenlogboek:

2002-07-05 18:45:09 172.31.77.6 2094 172.31.77.6 80 HTTP/1.1 GET /qos/1kbfile.txt 503 - ConnLimit  
2002-07-05 19:51:59 127.0.0.1 2780 127.0.0.1 80 HTTP/1.1 GET /ThisIsMyUrl.htm 400 - Hostname  
2002-07-05 19:53:00 127.0.0.1 2894 127.0.0.1 80 HTTP/2.0 GET / 505 - Version_N/S  
2002-07-05 20:06:01 172.31.77.6 64388 127.0.0.1 80 - - - - - Timer_MinBytesPerSecond

Soorten fouten die door de HTTP-API worden opgeslagen

De HTTP-API registreert foutreacties op clients, verbindingstime-outs, zwevende aanvragen en verbroken verbindingen die onjuist worden verwerkt.

In de volgende lijst worden de soorten fouten geïdentificeerd die door de HTTP-API worden opgeslagen:

  • Antwoorden op clients
    De HTTP-API verzendt een foutreactie naar een client, bijvoorbeeld een 400-fout die wordt veroorzaakt door een parseringsfout in de laatst ontvangen aanvraag. Nadat de HTTP-API het foutbericht heeft verzonden, wordt de verbinding gesloten.

  • Time-outs voor verbinding
    Er wordt een time-out uitgevoerd voor een verbinding met de HTTP-API. Als een aanvraag in behandeling is wanneer er een time-out van de verbinding optreedt, wordt de aanvraag gebruikt om meer informatie over de verbinding in het foutenlogboek op te geven.

  • Zwevende aanvragen
    Een proces in de gebruikersmodus wordt onverwacht gestopt terwijl er nog aanvragen in de wachtrij staan die naar dat proces worden doorgestuurd. De HTTP-API registreert de zwevende aanvragen in het foutenlogboek. Specifieke fouttypen worden benoemd door redenzintekenreeksen die altijd worden weergegeven als het laatste veld van elke foutregel. In de volgende tabel worden de HTTP-API-redentermen geïdentificeerd.

Redenzin Beschrijving
AppOffline Er is een fout opgetreden dat de service niet beschikbaar is (een HTTP-fout 503). De service is niet beschikbaar omdat toepassingsfouten ervoor hebben gezorgd dat de toepassing offline is gehaald.
AppPoolTimer Er is een fout opgetreden dat de service niet beschikbaar is (een HTTP-fout 503). De service is niet beschikbaar omdat het proces van de groep van toepassingen te druk is om de aanvraag af te handelen.
AppShutdown Er is een fout opgetreden dat de service niet beschikbaar is (een HTTP-fout 503). De service is niet beschikbaar omdat de toepassing automatisch wordt afgesloten als reactie op beheerdersbeleid.
BadRequest Er is een parsefout opgetreden tijdens het verwerken van een aanvraag.
Client_Reset De verbinding tussen de client en de server is gesloten voordat de aanvraag kon worden toegewezen aan een werkproces. De meest voorkomende oorzaak van dit gedrag is dat de client de verbinding met de server voortijdig sluit.
Connection_Abandoned_By_AppPool Een werkproces van de groep van toepassingen heeft onverwacht afgesloten of een aanvraag in behandeling laten zweven door de ingang ervan te sluiten.
Connection_Abandoned_By_ReqQueue Een werkproces van de groep van toepassingen heeft onverwacht afgesloten of een aanvraag in behandeling laten zweven door de ingang ervan te sluiten. Specifiek voor Windows Vista en latere versies en voor Windows Server 2008 en latere versies.
Connection_Dropped De verbinding tussen de client en de server is gesloten voordat de server het uiteindelijke antwoordpakket kon verzenden. De meest voorkomende oorzaak van dit gedrag is dat de client de verbinding met de server voortijdig sluit.
Connection_Dropped_List_Full De lijst met verbroken verbindingen tussen clients en de server is vol. Specifiek voor Windows Vista en latere versies en voor Windows Server 2008 en latere versies.
ConnLimit Er is een fout opgetreden dat de service niet beschikbaar is (een HTTP-fout 503). De service is niet beschikbaar omdat de verbindingslimiet op siteniveau is bereikt of overschreden.
Connections_Refused Het nonPagedPool-geheugen van de kernel is gedaald tot minder dan 20 MB en http.sys geen nieuwe verbindingen meer ontvangt
Uitgeschakeld Er is een fout opgetreden dat de service niet beschikbaar is (een HTTP-fout 503). De service is niet beschikbaar omdat een beheerder de toepassing offline heeft gehaald.
EntityTooLarge Een entiteit heeft de maximaal toegestane grootte overschreden.
FieldLength Een veldlengtelimiet is overschreden.
Verboden Tijdens het parseren is voldaan aan een verboden element of reeks.
Header Er is een parsefout opgetreden in een header.
Hostname Er is een parsefout opgetreden tijdens het verwerken van een hostnaam.
Intern Er is een interne serverfout opgetreden (een HTTP-fout 500).
Invalid_CR/LF Er is een illegale retour van het vervoer of de lijnfeed opgetreden.
LengthRequired Er ontbreekt een vereiste lengtewaarde.
N.v.t. Er is een fout opgetreden dat de service niet beschikbaar is (een HTTP-fout 503). De service is niet beschikbaar omdat er een interne fout is opgetreden (zoals een geheugentoewijzingsfout of een conflict met de URL-reserveringslijst).
N.i. Er is een niet-geïmplementeerde fout opgetreden (een HTTP-fout 501) of er is een fout met de service niet beschikbaar (een HTTP-fout 503) opgetreden vanwege een onbekende overdrachtscodering.
Nummer Er is een parsefout opgetreden tijdens het verwerken van een getal.
Voorwaarde Een vereiste voorwaarde ontbrak.
QueueFull Er is een fout opgetreden dat de service niet beschikbaar is (een HTTP-fout 503). De service is niet beschikbaar omdat de wachtrij voor toepassingsaanvragen vol is.
RequestLength Een aanvraaglengtelimiet is overschreden.
Timer_AppPool De verbinding is verlopen omdat een aanvraag te lang heeft gewacht in een wachtrij van een toepassingsgroep om de wachtrij van een servertoepassing ongedaan te maken en te verwerken. Deze time-outduur is ConnectionTimeout. Deze waarde is standaard ingesteld op twee minuten.
Timer_ConnectionIdle De verbinding is verlopen en blijft inactief. De standaardduur van ConnectionTimeout is twee minuten.
Timer_EntityBody De verbinding is verlopen voordat de hoofdtekst van de aanvraagentiteit is aangekomen. Wanneer een aanvraag duidelijk een entiteitshoofdtekst heeft, schakelt de HTTP-API de Timer_EntityBody timer in. In eerste instantie is de limiet van deze timer ingesteld op de waarde ConnectionTimeout (meestal twee minuten). Telkens wanneer er een andere gegevensindicatie wordt ontvangen voor deze aanvraag, stelt de HTTP-API de timer opnieuw in om de verbinding nog twee minuten te geven (of wat dan ook is opgegeven in ConnectionTimeout).
Timer_HeaderWait De verbinding is verlopen omdat het parseren van de header voor een aanvraag meer tijd in beslag nam dan de standaardlimiet van twee minuten.
Timer_MinBytesPerSecond De verbinding is verlopen omdat de client geen reactie heeft ontvangen met een redelijke snelheid. De verzendsnelheid van het antwoord was langzamer dan de standaardwaarde van 240 bytes per seconde. Deze kan worden beheerd met de metabase-eigenschap MinFileBytesPerSec.
Timer_ReqQueue De verbinding is verlopen omdat een aanvraag te lang in een wachtrij van een toepassingsgroep heeft gewacht totdat een servertoepassing de wachtrij ongedaan heeft gemaakt. Deze time-outduur is ConnectionTimeout. Deze waarde is standaard ingesteld op twee minuten. Specifiek voor Windows Vista en latere versies en voor Windows Server 2008 en latere versies.
Timer_Response Gereserveerd. Momenteel niet gebruikt.
Timer_SslRenegotiation
De verbinding is verlopen omdat ssl-heronderhandeling (Secure Sockets Layer) tussen de client en server langer duurde dan de standaard time-out van twee minuten.
URL Er is een parsefout opgetreden tijdens het verwerken van een URL.
URL_Length Een URL heeft de maximaal toegestane grootte overschreden.
Werkwoord Er is een parsefout opgetreden tijdens het verwerken van een werkwoord.
Version_N/S Er is een niet-ondersteunde fout opgetreden (een HTTP-fout 505).