Comment utiliser HTTP Erreurs détaillées dans IIS 7
introduction
Erreurs, quelles erreurs?
Cet article parle des erreurs HTTP comme spécifié dans le RFC HTTP (RFC 2616 - section 6.1.1). Une erreur HTTP est toujours exprimée en envoyant une réponse avec un code d'état supérieur à 400 au client demandeur.
Erreurs client
Erreurs de serveur
Les codes d'état commençant par 500 sont des erreurs causées par le serveur. Les causes les plus fréquentes de 500 erreurs sur les systèmes IIS sont les suivants:
Il est important de noter que les navigateurs comme IE remplacent souvent les erreurs renvoyées par un serveur web avec leurs propres erreurs. Cela rend plus difficile le dépannage. Dans Internet Explorer, vous pouvez désactiver cette fonction. Allez dans le menu « Outils », sélectionnez « Options Internet », cliquez sur l'onglet « Avancé » et trouver la case à cocher « Afficher les messages d'erreur HTTP friendly » et décocher. Pour voir la réponse brute, utiliser des outils HTTP comme WFetch dans IIS 6.0 Kit de ressources (voir « Liens connexes »).
Erreurs HTTP dans IIS
Il y a deux choses qui peuvent se produire lorsque le module httpError (custerr.dll) rencontre une erreur:
- Une erreur personnalisée est générée
- Une erreur est générée détaillée

erreurs détaillées sont destinées aux administrateurs locaux et les développeurs. Ils sont censés fournir des informations qui aide à résoudre le problème immédiatement. Voici un exemple de la même demande, mais maintenant retourner une erreur détaillée:


Tout d'abord: contrôle d'erreur
Le module de httpError reçoit une notification si une réponse est sur le point d'être envoyé (notification de RQ_SEND_RESPONSE). Le module vérifie httpError le code d'état de cette réponse et retourne immédiatement si le code d'état ne dépasse pas 400.
Deuxièmement: Erreur personnalisée ou erreur détaillée
Le prochain contrôle est déterminé par l'origine de la demande (la demande est une demande locale ou à distance) et le réglage de la propriété ErrorMode. La propriété ErrorMode est réglé sur DetailedLocalOnly, ce qui signifie que les erreurs personnalisées sont générées pour chaque demande à distance. Si ErrorMode est réglé sur « Personnalisé », puis toutes les réponses d'erreur deviendront erreur personnalisée. Si ErrorMode est réglé sur « détails » toutes les réponses d'erreur deviendront des erreurs détaillées. Le tableau suivant clarifie ce comportement:
Si le module httpError détermine qu'une erreur personnalisée doit être généré, il semble dans sa configuration pour voir si elle peut trouver une erreur correspondant. Si une correspondance est trouvée, il envoie le fichier statique, redirige la requête ou exécute l'URL spécifiée. Si aucune correspondance ne peut être trouvée, IIS envoyer un message d'une ligne de base contenant le code d'état. La section suivante explique la configuration d'erreur personnalisée en détail.
Si custerr.dll détermine qu'une erreur détaillée doit être généré, une autre vérification est nécessaire. IIS ne touche pas la réponse si un module emportaient sur l'entité de la réponse à sa propre description de l'erreur. Il peut contenir des informations précieuses. ASP.NET est un bon exemple. L'entité d'une réponse d'erreur ASP.NET peut contenir la pile d'exception et sa propre description de l'erreur. Une erreur détaillé est généré uniquement si le corps d'entité de la réponse est vide.
Configuration
Voici la section d'erreur personnalisée IIS obtenu sur une installation propre:
Vous voyez que si le code d'état d'une réponse est 401, IIS retourne un fichier nommé 401.htm.
Des codes de sous-état
De nombreuses erreurs HTTP ont un sous-état. La valeur par défaut IIS configuration Erreurs personnalisées ne différencie pas sur la base des codes de sous-état. Il envoie la même page d'erreur personnalisée si vous entrez les informations d'identification incorrectes (401.1), ou si vous avez vu refuser l'accès basé sur les droits invalides pour accéder à un fichier (401,3). Vous pouvez voir les différents codes de sous-état dans les fichiers journaux ou via erreurs détaillées. Voici une liste des différents codes 404 sous statut que IIS produit:
La demande Module de filtrage a rejeté une demande avec une chaîne de requête trop long.
Vous pouvez configurer la section httpErrors pour afficher une erreur personnalisée pour les codes sous-statut particulier. Si vous ajoutez la ligne suivante à la section de configuration httpErrors, IIS renvoie 404_3.htm si un fichier avec une extension de fichier est demandé ne figure pas dans l'IIS MimeMap (
Voici comment faire le travail exemple:
L'extension du fichier .yyy ne fait pas partie de l'IIS MimeMap et le gestionnaire de fichiers statiques ne le servir.
Nouveau dans IIS: spécifiques langue Erreurs personnalisées
Chaque navigateur plus récent comprend la langue du client en tant que tête de requête. Voici un exemple de la façon dont cet en-tête pourrait ressembler:
La syntaxe et le registre des langues acceptées est spécifié dans RFC1766.
Lors de la génération d'une erreur, IIS prend en compte cet en-tête quand il recherche le fichier d'erreur personnalisé retourne. Il génère le chemin de l'erreur personnalisée en utilisant la logique suivante:
paramètre de configuration prefixLanguageFilePath (par exemple C: \ inetpub \ custerr) +
tête Accept-Language envoyé par le client (par exemple en-us) +
paramètre de configuration de chemin (par exemple 404.htm)
Si le navigateur envoie une demande d'une ressource non-existante et l'en-tête « Accept-Language » a la valeur « en-us », le fichier qui est renvoyée sera c: \ inetpub \ custerr \ en-us \ 404. htm.
Par exemple, si vous êtes d'Allemagne, vous voulez que vos messages d'erreur en allemand. Pour ce faire, vous devez installer la langue de Windows Vista Service Pack pour l'allemand. Cela crée le répertoire c: \ inetpub \ custerr \ répertoire de-DE avec les fichiers d'erreur personnalisés en elle. Maintenant, si le navigateur envoie l'en-tête "Accept-Language" avec la valeur de « de-DE, le fichier qui est renvoyée sera c: \ inetpub \ custerr \ de-DE \ 404.htm.
IIS sera toujours revenir à la langue du système si le répertoire « de-DE » n'existe pas.
Internet Explorer vous permet de configurer l'en-tête Accept-Language. Allez dans « Outils » - onglet « Options Internet », sélectionnez l'onglet « Général » et cliquez sur le bouton « Langues ».
Options d'erreur personnalisée
Dans les exemples ci-dessus, IIS envoie le contenu du fichier comme la réponse d'erreur personnalisée. IIS a deux autres façons de répondre à une erreur: en exécutant une URL ou en redirigeant la demande.
ExecuteURL
Considérations sur la sécurité
Une mise en garde: Pour des raisons architecturales, IIS ne peut exécuter l'URL si elle est située dans le même pool d'applications. Utilisez la fonction de redirection pour exécuter une erreur personnalisée dans un autre pool d'applications.
IIS peut également renvoyer une redirection 302 au navigateur lorsqu'une erreur particulière se produit. Redirect est bon si vous avez une batterie de serveurs. Par exemple, vous pouvez rediriger toutes vos erreurs à un emplacement central que vous surveiller de près.
Il y a risque cependant: responseMode = « Fichier » (ce qui est la valeur par défaut) vous permet de spécifier tous les fichiers sur le disque. Cela ne fonctionnera pas si vous êtes très soucieux de la sécurité.
Un scénario réaliste pourrait inclure seulement permettre la délégation du cadre ErrorMode. Cela permet à un développeur de recevoir des erreurs détaillées pour sa demande même s'il utilise un client distant. Tout ce qui est nécessaire est de définir ErrorMode = « détaillée ». Voici comment configurer ce scénario:
Permettre à la délégation de la section httpErrors:
En second lieu, aller à la
Erreurs personnalisées et détaillées sont puissantes fonctionnalités IIS. Ils vous aident à résoudre les problèmes sans compromettre la sécurité de votre serveur IIS. De nombreuses options de configuration vous aident à adapter sur mesure l'expérience de vos utilisateurs. Plus important encore: expérimenter avec elle est un plaisir.