DossierRisque : Prudence
HTTPERR C:\Windows\System32\LogFiles\HTTPERR
HTTPERR\httperr<n>.log : journaux d'erreurs du pilote HTTP.sys, avec les requêtes rejetées avant d'atteindre IIS ou l'application. Utile pour les erreurs 400.
À quoi ça sert
HTTPERR reçoit les journaux d’erreurs de l’API de serveur HTTP, c’est-à-dire du pilote HTTP.sys qui écoute devant IIS et d’autres serveurs HTTP. Il est créé dans le dossier de journaux configuré (%SystemRoot%\System32\LogFiles par défaut), accessible aux seuls administrateurs et au compte système. On y retrouve les requêtes que le pilote refuse avant qu’elles n’atteignent le serveur web : c’est la source pour une erreur 400 qui n’apparaît pas dans les journaux IIS, ou pour des connexions coupées.
Ce qu’il contient
- Des fichiers
httperr<n>.log(httperr1.log,httperr2.log…), numérotés en séquence. - Du texte au format de journal W3C. La ligne
#Fieldsdonne les colonnes : date, heure, adresse et port du client, adresse et port du serveur, version HTTP, méthode, URI, code de réponse, site, motif de rejet (s-reason) et file d’attente. - Le motif est la colonne qui compte. Quelques valeurs fréquentes :
BadRequest,Hostname,Timer_ConnectionIdle,Connection_Abandoned_By_AppPool.
Risques et bonnes pratiques
- Un fichier est clos quand il atteint
ErrorLogFileTruncateSize(1 Mo par défaut, valeur minimale) et un nouveau est ouvert : aucun nettoyage manuel n’est nécessaire. - Les paramètres sont sous
HKLM\System\CurrentControlSet\Services\HTTP\Parameters(EnableErrorLogging,ErrorLogFileTruncateSize,ErrorLoggingDir). Ils ne sont pris en compte qu’après redémarrage du pilote (net stop http,net start http), qui interrompt les services dépendants : planifiez l’opération. - Les fichiers contiennent des adresses IP de clients : protégez-en les copies.
Commandes utiles
# Lister les fichiers d'erreurs HTTP.sysGet-ChildItem -Force "$env:windir\System32\LogFiles\HTTPERR" | Select-Object Name, Length, LastWriteTime
# Lire la fin du fichier le plus récentGet-ChildItem "$env:windir\System32\LogFiles\HTTPERR\httperr*.log" | Sort-Object LastWriteTime | Select-Object -Last 1 | Get-Content -Tail 40
# Chercher un motif de rejet (par exemple Timer_ ou BadRequest)Select-String -Path "$env:windir\System32\LogFiles\HTTPERR\httperr*.log" -Pattern "BadRequest|Timer_" | Select-Object -Last 20
# Lire la configuration de la journalisation d'erreurs de HTTP.sysGet-ItemProperty "HKLM:\System\CurrentControlSet\Services\HTTP\Parameters" | Select-Object EnableErrorLogging, ErrorLogFileTruncateSize, ErrorLoggingDir