Fel vid loggning i HTTP-API:er

Den här artikeln beskriver felloggningsfunktionerna i API:er (HyperText Transfer Protocol) programprogram.

Ursprunglig produktversion: Windows Server 2008 R2, Windows Server 2008, Windows Server 2012 R2, Windows Server 2012, Windows 10, Windows 8.1
Ursprungligt KB-nummer: 820729

Sammanfattning

Vissa fel som inträffar i ett HTTP-baserat program hanteras automatiskt av HTTP-API:et i stället för att skickas tillbaka till ett program för hantering. Det här beteendet beror på att frekvensen för sådana fel annars kan översvämma en händelselogg eller en programhanterare.

Följande avsnitt beskriver de olika aspekterna av HTTP API-felloggning.

  • Konfigurera HTTP API-felloggning
    Registerinställningarna styr HTTP API-loggarnas fel, den maximala tillåtna storleken på loggfiler och loggfilernas plats.

  • Format för HTTP API-felloggarna
    HTTP-API:et skapar loggfiler som följer W3C-loggfilkonventionerna (World Wide Web Consortium). Du kan använda standardverktyg för att parsa dessa loggfiler. Men till skillnad från W3C-loggfiler innehåller HTTP API-loggfilerna inte kolumnnamnen.

  • Typer av fel som HTTP API-loggarna
    HTTP-API:et loggar många vanliga fel.

Följande metoder beskriver lösningen av HTTP API-felloggning.

Konfigurera HTTP API-felloggning

Tre registervärden under en HTTP \Parameters-nyckel styr HTTP API-felloggningen. Dessa nycklar finns i registernyckeln: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters.

Obs!

Platsen och formen på konfigurationsvärdena kan ändras i senare versioner av Windows-operativsystemet.

Du måste ha autentiseringsuppgifter för administratör/lokalt system för att ändra registervärdena och för att kunna visa eller ändra loggfilerna och mappen som innehåller dem.

Konfigurationsinformationen i registervärdena läss när HTTP API-drivrutinen startar. Om du ändrar inställningarna måste du stoppa och sedan starta om drivrutinen för att läsa de nya värdena. Det gör du genom att skriva följande konsolkommandon:

net stop http
net start http

Följande namngivningskonvention används för att namnge loggfilerna:
httperr + sekvensnummer + .log
Exempel: httperr4.log

Loggfiler växlas när de når den maximala storlek som registervärdet ErrorLogFileTruncateSize anger. Det här värdet får inte vara mindre än 1 MB.

Om konfigurationen av felloggning inte är giltig, eller om någon typ av fel inträffar när HTTP-API:et skriver till loggfilerna, använder HTTP-API:et händelseloggning för att meddela administratörer om att felloggning inte inträffar.

I följande tabell beskrivs registerkonfigurationsvärdena.

Registervärde Beskrivning
EnableErrorLogging Ett DWORD som du kan ange till TRUE för att aktivera felloggning eller falskt för att inaktivera det. Standardvärdet är TRUE.
ErrorLogFileTruncateSize Ett DWORD som anger den maximala storleken på en felloggfil i byte. Standardvärdet är 1 MB (0x100000).

Det angivna värdet får inte vara mindre än standardvärdet.
ErrorLoggingDir En sträng som anger mappen där HTTP-API:et placerar sina loggningsfiler.

HTTP-API:et skapar en undermapp HTTPERR i den angivna mappen och lagrar sedan loggfilerna i undermappen. Den här undermappen och loggfilerna får samma behörighetsinställningar. Administratörskonton och lokala systemkonton har fullständig åtkomst. Andra användare har inte åtkomst.

Följande exempel är standardmappen när mappen inte anges i registret:
%SystemRoot%\System32\LogFiles

Strängvärdet ErrorLoggingDir måste vara en fullständigt kvalificerad lokal sökväg. Den kan dock innehålla %SystemRoot%. Det går inte att använda en nätverksenhet eller nätverksresurs.

Format för HTTP API-felloggarna

I allmänhet har HTTP API-felloggfiler samma format som W3C-felloggar, förutom att HTTP API-felloggfiler inte innehåller kolumnrubriker. Varje rad i en HTTP API-fellogg registrerar ett fel. Fälten visas i en viss ordning. Ett blankstegstecken (0x0020) separerar varje fält från föregående fält. I varje fält ersätter plustecken (0x002B) blankstegstecken, flikar och icke-utskrivbara kontrolltecken.

I följande tabell identifieras fälten och ordningen på fälten i en felloggpost.

Fält Beskrivning
Datum Fältet Datum följer W3C-formatet. Det här fältet baseras på Coordinated Universal Time (UTC). Fältet Datum är alltid 10 tecken i form av ÅÅÅÅ-MM-DD. Till exempel uttrycks 1 maj 2003 som 2003-05-01.
Tid Fältet Tid följer W3C-formatet. Det här fältet baseras på UTC. Tidsfältet är alltid åtta tecken i form av MM:HH:SS. Till exempel uttrycks 17:30 (UTC) som 17:30:00.
IP-adress (Client Internet Protocol) IP-adressen för den berörda klienten. Värdet i det här fältet kan vara antingen en IPv4-adress eller en IPv6-adress. Om klientens IP-adress är en IPv6-adress inkluderas även fältet ScopeId i adressen.
Klientport Portnumret för den berörda klienten.
Serverns IP-adress IP-adressen för den berörda servern. Värdet i det här fältet kan vara antingen en IPv4-adress eller en IPv6-adress. Om serverns IP-adress är en IPv6-adress inkluderas även fältet ScopeId i adressen.
Serverport Portnumret för den berörda servern.
Protokollversion Den version av protokollet som används.

Om anslutningen inte har parsats tillräckligt för att fastställa protokollversionen används ett bindestreck (0x002D) som platshållare för det tomma fältet.

Om antingen huvudversionsnumret eller delversionsnumret som parsas är större än eller lika med 10 loggas versionen som HTTP/?.?.
Verb Verbet anger den sista begäran som parsas. Okända verb ingår, men alla verb som är mer än 255 byte trunkeras till den här längden. Om ett verb inte är tillgängligt används ett bindestreck (0x002D) som platshållare för det tomma fältet.
CookedURL + Fråga URL:en och alla frågor som är associerade med den loggas som ett fält som avgränsas med ett frågetecken (0x3F). Det här fältet trunkeras med en längd på 4 096 byte.

Om den här URL:en parsades ("kokt" loggas den med lokal kodsidaskonvertering och behandlas som ett Unicode-fält.

Om den här URL:en inte har parsats ("kokt") vid tidpunkten för loggningen kopieras den exakt, utan någon Unicode-konvertering.

Om HTTP-API:et inte kan parsa den här URL:en används ett bindestreck (0x002D) som platshållare för det tomma fältet.
Protokollstatus Protokollstatusen får inte vara större än 999.

Om protokollstatusen för svaret på en begäran är tillgänglig loggas den i det här fältet.

Om protokollstatusen inte är tillgänglig används ett bindestreck (0x002D) som platshållare för det tomma fältet.
SiteId Används inte i den här versionen av HTTP-API:et. Ett platshållar bindestreck (0x002D) visas alltid i det här fältet.
Orsaksfras Det här fältet innehåller en sträng som identifierar den typ av fel som loggas. Det här fältet lämnas aldrig tomt.
Könamn Det är namnet på begärandekön.

Följande exempelrader kommer från en HTTP API-fellogg:

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

Typer av fel som HTTP API-loggarna

HTTP API loggar felsvar till klienter, tidsgränser för anslutning, överblivna begäranden och borttagna anslutningar som hanteras felaktigt.

I följande lista identifieras de typer av fel som HTTP API-loggarna:

  • Svar på klienter
    HTTP-API:et skickar ett felsvar till en klient, till exempel ett 400-fel som orsakas av ett parsningsfel i den senast mottagna begäran. När HTTP-API:et har skickat felsvaret stängs anslutningen.

  • Tidsgränser för anslutning
    HTTP-API:et överskrider tidsgränsen för en anslutning. Om en begäran väntar när anslutningen överskrider tidsgränsen används begäran för att ge mer information om anslutningen i felloggen.

  • Överblivna begäranden
    En process i användarläge stoppas oväntat medan det fortfarande finns köade begäranden som dirigeras till den processen. HTTP-API:et loggar överblivna begäranden i felloggen. Specifika feltyper namnges av orsaksfrassträngar som alltid visas som det sista fältet på varje felrad. Följande tabell identifierar HTTP API-orsaksfraser.

Orsaksfras Beskrivning
AppOffline Ett fel uppstod när tjänsten inte var tillgänglig (http-fel 503). Tjänsten är inte tillgänglig eftersom programfel gjorde att programmet togs offline.
AppPoolTimer Ett fel uppstod när tjänsten inte var tillgänglig (http-fel 503). Tjänsten är inte tillgänglig eftersom programpoolsprocessen är för upptagen för att hantera begäran.
AppShutdown Ett fel uppstod när tjänsten inte var tillgänglig (http-fel 503). Tjänsten är inte tillgänglig eftersom programmet stängs av automatiskt som svar på administratörsprincipen.
BadRequest Ett parsningsfel uppstod när en begäran bearbetades.
Client_Reset Anslutningen mellan klienten och servern stängdes innan begäran kunde tilldelas till en arbetsprocess. Den vanligaste orsaken till det här beteendet är att klienten stänger anslutningen till servern i förtid.
Connection_Abandoned_By_AppPool En arbetsprocess från programpoolen har oväntat avslutats eller överblivit en väntande begäran genom att stänga handtaget.
Connection_Abandoned_By_ReqQueue En arbetsprocess från programpoolen har oväntat avslutats eller överblivit en väntande begäran genom att stänga handtaget. Gäller för Windows Vista och senare versioner och för Windows Server 2008 och senare versioner.
Connection_Dropped Anslutningen mellan klienten och servern stängdes innan servern kunde skicka sitt slutliga svarspaket. Den vanligaste orsaken till det här beteendet är att klienten stänger anslutningen till servern i förtid.
Connection_Dropped_List_Full Listan över borttagna anslutningar mellan klienter och servern är full. Gäller för Windows Vista och senare versioner och för Windows Server 2008 och senare versioner.
ConnLimit Ett fel uppstod när tjänsten inte var tillgänglig (http-fel 503). Tjänsten är inte tillgänglig eftersom anslutningsgränsen på platsnivå har nåtts eller överskridits.
Connections_Refused Kernelminnet nonPagedPool har sjunkit under 20 MB och http.sys har slutat ta emot nya anslutningar
Inaktiverad Ett fel uppstod när tjänsten inte var tillgänglig (http-fel 503). Tjänsten är inte tillgänglig eftersom en administratör har tagit programmet offline.
EntityTooLarge En entitet överskred den maximala tillåtna storleken.
FieldLength En gräns för fältlängd överskreds.
Ej tillåtet Ett förbjudet element eller en sekvens uppfylldes under parsningen.
Rubrik Ett parsningsfel uppstod i en rubrik.
Hostname Ett parsningsfel uppstod när ett värdnamn bearbetades.
Intern Ett internt serverfel uppstod (ett HTTP-fel 500).
Invalid_CR/LF En ogiltig vagnretur eller radmatning har inträffat.
LengthRequired Ett obligatoriskt längdvärde saknades.
EJ TILLÄMPLIGT Ett fel uppstod när tjänsten inte var tillgänglig (http-fel 503). Tjänsten är inte tillgänglig eftersom ett internt fel (till exempel ett minnesallokeringsfel eller en konflikt med URL-reservationslistan) uppstod.
Ej tillämpligt Ett icke-implementerat fel uppstod (http-fel 501) eller så uppstod ett fel om att tjänsten inte är tillgänglig (ett HTTP-fel 503) på grund av en okänd överföringskodning.
Tal Ett parsningsfel uppstod när ett tal bearbetades.
Förutsättning En nödvändig förutsättning saknades.
QueueFull Ett fel uppstod när tjänsten inte var tillgänglig (http-fel 503). Tjänsten är inte tillgänglig eftersom kön för programbegäran är full.
RequestLength En gräns för begärandelängd överskreds.
Timer_AppPool Anslutningen upphörde att gälla eftersom en begäran väntade för länge i en programpoolskö för att ett serverprogram skulle avköeras och bearbetas. Den här tidsgränsen är ConnectionTimeout. Som standard är det här värdet inställt på två minuter.
Timer_ConnectionIdle Anslutningen har upphört att gälla och förblir inaktiv. Standardvaraktigheten för ConnectionTimeout är två minuter.
Timer_EntityBody Anslutningen gick ut innan begärandeentitetens entitetstext anlände. När en begäran tydligt har en entitetstext aktiverar HTTP-API:et Timer_EntityBody timer. Först anges gränsen för den här timern till värdet ConnectionTimeout (vanligtvis två minuter). Varje gång en annan dataindikering tas emot på den här begäran återställer HTTP-API:et timern för att ge anslutningen ytterligare två minuter (eller vad som anges i ConnectionTimeout).
Timer_HeaderWait Anslutningen upphörde att gälla eftersom rubrikparsningen för en begäran tog längre tid än standardgränsen på två minuter.
Timer_MinBytesPerSecond Anslutningen upphörde att gälla eftersom klienten inte fick något svar med rimlig hastighet. Svarsfrekvensen var långsammare än standardvärdet på 240 byte per sekund. Vilket kan styras med metabasegenskapen MinFileBytesPerSec.
Timer_ReqQueue Anslutningen upphörde att gälla eftersom en begäran väntade för länge i en programpoolskö för att ett serverprogram skulle avkönas. Den här tidsgränsen är ConnectionTimeout. Som standard är det här värdet inställt på två minuter. Gäller för Windows Vista och senare versioner och för Windows Server 2008 och senare versioner.
Timer_Response Reserverade. Används inte för närvarande.
Timer_SslRenegotiation
Anslutningen upphörde eftersom SSL-omförhandlingen (Secure Sockets Layer) mellan klienten och servern tog längre tid än standardtidsgränsen på två minuter.
URL Ett parsningsfel uppstod när en URL bearbetades.
URL_Length En URL överskred den maximala tillåtna storleken.
Verb Ett parsningsfel uppstod när ett verb bearbetades.
Version_N/S Ett versionsfel som inte stöds inträffade (http-fel 505).