Errore durante la registrazione nelle API HTTP

Questo articolo descrive le funzionalità di registrazione degli errori delle API (Application Programming Interface) http (HyperText Transfer Protocol).

Versione originale del prodotto: Windows Server 2008 R2, Windows Server 2008, Windows Server 2012 R2, Windows Server 2012, Windows 10, Windows 8.1
Numero KB originale: 820729

Riepilogo

Alcuni errori che si verificano in un'applicazione basata su HTTP vengono gestiti automaticamente dall'API HTTP anziché essere passati a un'applicazione per la gestione. Questo comportamento si verifica perché la frequenza di tali errori potrebbe inondare un registro eventi o un gestore dell'applicazione.

Negli argomenti seguenti vengono descritti i diversi aspetti della registrazione degli errori dell'API HTTP.

I metodi seguenti descrivono la risoluzione della registrazione degli errori dell'API HTTP.

Configurare la registrazione degli errori dell'API HTTP

Tre valori del Registro di sistema in una chiave HTTP \Parameters controllano la registrazione degli errori dell'API HTTP. Queste chiavi si trovano nella chiave del Registro di sistema: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters.

Nota

La posizione e il formato dei valori di configurazione possono cambiare nelle versioni successive del sistema operativo Windows.

Per modificare i valori del Registro di sistema e visualizzare o modificare i file di log e la cartella che li contiene, è necessario disporre di credenziali di amministratore/sistema locale.

Le informazioni di configurazione nei valori del Registro di sistema vengono lette all'avvio del driver API HTTP. Quindi, se si modificano le impostazioni, è necessario arrestare e quindi riavviare il driver per leggere i nuovi valori. A tale scopo, digitare i comandi della console seguenti:

net stop http
net start http

La convenzione di denominazione seguente viene usata per denominare i file di log:
httperr + numero di sequenza + .log
Esempio: httperr4.log

I file di log vengono ciclo quando raggiungono le dimensioni massime specificate dal valore del Registro di sistema ErrorLogFileTruncateSize. Questo valore non può essere minore di 1 megabyte (MB).

Se la configurazione della registrazione degli errori non è valida o se si verifica un errore durante la scrittura dell'API HTTP nei file di log, l'API HTTP usa la registrazione eventi per notificare agli amministratori che la registrazione degli errori non si verifica.

Nella tabella seguente vengono descritti i valori di configurazione del Registro di sistema.

Valore del Registro di sistema Descrizione
EnableErrorLogging Valore DWORD che è possibile impostare su TRUE per abilitare la registrazione degli errori o su FALSE per disabilitarlo. Il valore predefinito è TRUE.
ErrorLogFileTruncateSize Valore DWORD che specifica le dimensioni massime di un file di log degli errori, in byte. Il valore predefinito è 1 MB (0x100000).

Il valore specificato non può essere inferiore al valore predefinito.
ErrorLoggingDir Valore String che specifica la cartella in cui l'API HTTP inserisce i file di registrazione.

L'API HTTP crea una sottocartella HTTPERR nella cartella specificata e quindi archivia i file di log nella sottocartella. Questa sottocartella e i file di log ricevono le stesse impostazioni di autorizzazione. Gli account amministratore e di sistema locale hanno accesso completo. Gli altri utenti non hanno accesso.

L'esempio seguente è la cartella predefinita quando la cartella non è specificata nel Registro di sistema:
%SystemRoot%\System32\LogFiles

Il valore della stringa ErrorLoggingDir deve essere un percorso locale completo. Tuttavia, può contenere %SystemRoot%. Non è possibile usare un'unità di rete o una condivisione di rete.

Formato dei log degli errori dell'API HTTP

In genere, i file di log degli errori dell'API HTTP hanno lo stesso formato dei log degli errori W3C, ad eccezione del fatto che i file di log degli errori dell'API HTTP non contengono intestazioni di colonna. Ogni riga di un log degli errori dell'API HTTP registra un errore. I campi vengono visualizzati in un ordine specifico. Un singolo carattere di spazio (0x0020) separa ogni campo dal campo precedente. In ogni campo i segni più (0x002B) sostituiscono spazi, schede e caratteri di controllo non stampabili.

La tabella seguente identifica i campi e l'ordine dei campi in un record del log degli errori.

Campo Descrizione
Data Il campo Data segue il formato W3C. Questo campo è basato sull'ora UTC (Coordinated Universal Time). Il campo Data è sempre di 10 caratteri sotto forma di AAAA-MM-GG. Ad esempio, il 1° maggio 2003 è espresso come 2003-05-01.
Ora Il campo Ora segue il formato W3C. Questo campo è basato sull'ora UTC. Il campo ora è sempre composto da otto caratteri sotto forma di MM:HH:SS. Ad esempio, le 17:30 (UTC) sono espresse come 17:30:00.
Indirizzo IP (Client Internet Protocol) Indirizzo IP del client interessato. Il valore in questo campo può essere un indirizzo IPv4 o un indirizzo IPv6. Se l'indirizzo IP del client è un indirizzo IPv6, anche il campo ScopeId viene incluso nell'indirizzo.
Porta client Numero di porta per il client interessato.
Indirizzo IP server Indirizzo IP del server interessato. Il valore in questo campo può essere un indirizzo IPv4 o un indirizzo IPv6. Se l'indirizzo IP del server è un indirizzo IPv6, anche il campo ScopeId viene incluso nell'indirizzo.
Porta server Numero di porta del server interessato.
Versione del protocollo Versione del protocollo in uso.

Se la connessione non è stata analizzata in modo sufficiente per determinare la versione del protocollo, viene usato un trattino (0x002D) come segnaposto per il campo vuoto.

Se il numero di versione principale o il numero di versione secondaria analizzato è maggiore o uguale a 10, la versione viene registrata come HTTP/?.?.
Verbo Il verbo indica l'ultima richiesta analizzata. I verbi sconosciuti sono inclusi, ma qualsiasi verbo che è più di 255 byte viene troncato a questa lunghezza. Se un verbo non è disponibile, viene usato un trattino (0x002D) come segnaposto per il campo vuoto.
CookedURL + Query L'URL e qualsiasi query associata vengono registrati come un campo separato da un punto interrogativo (0x3F). Questo campo viene troncato al limite di lunghezza di 4.096 byte.

Se questo URL è stato analizzato ("cotto"), viene registrato con la conversione della tabella codici locale e viene considerato come un campo Unicode.

Se questo URL non è stato analizzato ("cotto") al momento della registrazione, viene copiato esattamente, senza alcuna conversione Unicode.

Se l'API HTTP non è in grado di analizzare questo URL, viene usato un trattino (0x002D) come segnaposto per il campo vuoto.
Stato protocollo Lo stato del protocollo non può essere maggiore di 999.

Se lo stato del protocollo della risposta a una richiesta è disponibile, viene registrato in questo campo.

Se lo stato del protocollo non è disponibile, viene usato un trattino (0x002D) come segnaposto per il campo vuoto.
SiteId Non usato in questa versione dell'API HTTP. In questo campo viene sempre visualizzato un segno meno segnaposto (0x002D).
Frase motivo Questo campo contiene una stringa che identifica il tipo di errore registrato. Questo campo non viene mai lasciato vuoto.
Nome coda Si tratta del nome della coda delle richieste.

Le righe di esempio seguenti provengono da un log degli errori dell'API HTTP:

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

Tipi di errori che vengono log dell'API HTTP

L'API HTTP registra le risposte agli errori ai client, i timeout di connessione, le richieste orfane e le connessioni eliminate gestite in modo non corretto.

L'elenco seguente identifica i tipi di errori log dell'API HTTP:

  • Risposte ai client
    L'API HTTP invia una risposta di errore a un client, ad esempio un errore 400 causato da un errore di analisi nell'ultima richiesta ricevuta. Dopo che l'API HTTP ha inviato la risposta di errore, chiude la connessione.

  • Timeout della connessione
    L'API HTTP esegue il timeout di una connessione. Se una richiesta è in sospeso al timeout della connessione, la richiesta viene usata per fornire altre informazioni sulla connessione nel log degli errori.

  • Richieste orfane
    Un processo in modalità utente si arresta in modo imprevisto mentre sono ancora presenti richieste in coda che vengono instradate a tale processo. L'API HTTP registra le richieste orfane nel log degli errori. I tipi di errore specifici sono denominati dalle stringhe reason phrase che vengono sempre visualizzate come ultimo campo di ogni riga di errore. La tabella seguente identifica le frasi motivo dell'API HTTP.

Frase motivo Descrizione
AppOffline Si è verificato un errore di servizio non disponibile (errore HTTP 503). Il servizio non è disponibile perché gli errori dell'applicazione hanno causato l'accesso offline dell'applicazione.
AppPoolTimer Si è verificato un errore di servizio non disponibile (errore HTTP 503). Il servizio non è disponibile perché il processo del pool di applicazioni è troppo occupato per gestire la richiesta.
AppShutdown Si è verificato un errore di servizio non disponibile (errore HTTP 503). Il servizio non è disponibile perché l'applicazione viene arrestata automaticamente in risposta ai criteri di amministratore.
BadRequest Si è verificato un errore di analisi durante l'elaborazione di una richiesta.
Client_Reset La connessione tra il client e il server è stata chiusa prima che la richiesta potesse essere assegnata a un processo di lavoro. La causa più comune di questo comportamento è che il client chiude prematuramente la connessione al server.
Connection_Abandoned_By_AppPool Un processo di lavoro dal pool di applicazioni ha chiuso in modo imprevisto o orfano una richiesta in sospeso chiudendone l'handle.
Connection_Abandoned_By_ReqQueue Un processo di lavoro dal pool di applicazioni ha chiuso in modo imprevisto o orfano una richiesta in sospeso chiudendone l'handle. Specifica di Windows Vista e versioni successive e di Windows Server 2008 e versioni successive.
Connection_Dropped La connessione tra il client e il server è stata chiusa prima che il server potesse inviare il pacchetto di risposta finale. La causa più comune di questo comportamento è che il client chiude prematuramente la connessione al server.
Connection_Dropped_List_Full L'elenco delle connessioni eliminate tra i client e il server è pieno. Specifica di Windows Vista e versioni successive e di Windows Server 2008 e versioni successive.
ConnLimit Si è verificato un errore di servizio non disponibile (errore HTTP 503). Il servizio non è disponibile perché il limite di connessione a livello di sito è stato raggiunto o superato.
Connections_Refused La memoria del kernel NonPagedPool è scesa sotto i 20 MB e http.sys ha smesso di ricevere nuove connessioni
Disabilitato Si è verificato un errore di servizio non disponibile (errore HTTP 503). Il servizio non è disponibile perché un amministratore ha portato offline l'applicazione.
EntityTooLarge Un'entità ha superato le dimensioni massime consentite.
FieldLength È stato superato un limite di lunghezza del campo.
Operazione non consentita Durante l'analisi è stata soddisfatta una sequenza o un elemento non consentito.
Intestazione Si è verificato un errore di analisi in un'intestazione.
Nome host Si è verificato un errore di analisi durante l'elaborazione di un nome host.
Interno Si è verificato un errore interno del server (errore HTTP 500).
Invalid_CR/LF Si è verificato un ritorno a capo o un avanzamento riga non valido.
LengthRequired Manca un valore di lunghezza richiesto.
N/D Si è verificato un errore di servizio non disponibile (errore HTTP 503). Il servizio non è disponibile perché si è verificato un errore interno, ad esempio un errore di allocazione della memoria o un conflitto dell'elenco di prenotazioni URL.
N/I Si è verificato un errore non implementato (errore HTTP 501) o si è verificato un errore di servizio non disponibile (errore HTTP 503) a causa di una codifica di trasferimento sconosciuta.
Numero Si è verificato un errore di analisi durante l'elaborazione di un numero.
Condizione preliminare Manca una precondizione necessaria.
QueueFull Si è verificato un errore di servizio non disponibile (errore HTTP 503). Il servizio non è disponibile perché la coda delle richieste dell'applicazione è piena.
RequestLength È stato superato un limite di lunghezza della richiesta.
Timer_AppPool La connessione è scaduta perché una richiesta ha aspettato troppo a lungo in una coda del pool di applicazioni perché un'applicazione server si de-accodasse ed elaborasse. Questa durata del timeout è ConnectionTimeout. Per impostazione predefinita, questo valore è impostato su due minuti.
Timer_ConnectionIdle La connessione è scaduta e rimane inattiva. La durata predefinita di ConnectionTimeout è di due minuti.
Timer_EntityBody La connessione è scaduta prima dell'arrivo del corpo dell'entità richiesta. Quando una richiesta ha chiaramente un corpo di entità, l'API HTTP attiva il timer Timer_EntityBody. All'inizio, il limite di questo timer è impostato sul valore ConnectionTimeout (in genere, due minuti). Ogni volta che viene ricevuta un'altra indicazione dei dati in questa richiesta, l'API HTTP reimposta il timer per concedere alla connessione altri due minuti (o qualsiasi altra indicazione specificata in ConnectionTimeout).
Timer_HeaderWait La connessione è scaduta perché l'analisi dell'intestazione per una richiesta ha richiesto più tempo rispetto al limite predefinito di due minuti.
Timer_MinBytesPerSecond La connessione è scaduta perché il client non riceveva una risposta a una velocità ragionevole. La velocità di invio della risposta è stata più lenta rispetto al valore predefinito di 240 byte/sec. Che può essere controllata con la proprietà della metabase MinFileBytesPerSec.
Timer_ReqQueue La connessione è scaduta perché una richiesta ha aspettato troppo a lungo in una coda del pool di applicazioni perché un'applicazione server si de-accodasse. Questa durata del timeout è ConnectionTimeout. Per impostazione predefinita, questo valore è impostato su due minuti. Specifica di Windows Vista e versioni successive e di Windows Server 2008 e versioni successive.
Timer_Response Riservati. Attualmente non usato.
Timer_SslRenegotiation
La connessione è scaduta perché la rinegoziazione SSL (Secure Sockets Layer) tra il client e il server ha richiesto più tempo del timeout predefinito di due minuti.
URL Si è verificato un errore di analisi durante l'elaborazione di un URL.
URL_Length Un URL ha superato le dimensioni massime consentite.
Verbo Si è verificato un errore di analisi durante l'elaborazione di un verbo.
Version_N/S Si è verificato un errore di versione non supportata (errore HTTP 505).