Wie Verwenden von HTTP Detaillierte Fehler in IIS 7

Einführung

Fehler, welche Fehler?

Dieser Artikel spricht über HTTP-Fehler wie in der HTTP RFC (RFC 2616 - Abschnitt 6.1.1). Ein HTTP-Fehler wird immer durch Senden einer Antwort mit einem Statuscode von mehr als 400 zurück an den anfordernden Client zum Ausdruck gebracht.

Client-Fehler

Server-Fehler

Statuscodes mit 500 beginnen, sind Fehler, die vom Server verursacht. Die häufigsten Ursachen für Fehler 500 auf IIS-Systeme sind:

Es ist wichtig zu beachten, dass Browser wie IE häufig Fehler von einem Webserver mit ihren eigenen Fehlern zurück ersetzen. Dies macht Problem härter. In IE können Sie diese Funktion ausschalten. Gehen Sie auf das Menü „Extras“, wählen Sie „Internetoptionen“, klicken Sie auf die Registerkarte „Erweitert“ und finden Sie die „Show HTTP-Fehlermeldungen“ Kontrollkästchen und deaktivieren Sie es. Um zu sehen, die rohe Reaktion, verwenden Sie HTTP-Tools wie WFetch im IIS 6.0 Resource Kit (siehe "Links zum Thema").

HTTP-Fehler in IIS

Es gibt zwei Dinge, die passieren können, wenn das Modul httperror (custerr.dll) ein Fehler auftritt:

  • Ein kundenspezifische Fehler generiert
  • Ein detaillierter Fehler wird erzeugt,

Wie Verwenden von HTTP Detaillierte Fehler in IIS 7

Detaillierte Fehler werden für lokale Administratoren und Entwickler. Sie sollen Informationen zur Verfügung zu stellen, die das Problem sofort beheben hilft. Hier ist ein Beispiel für die gleiche Anfrage, aber jetzt einen detaillierten Fehlers Rückkehr:

Wie Verwenden von HTTP Detaillierte Fehler in IIS 7

Wie Verwenden von HTTP Detaillierte Fehler in IIS 7

Erstens: Fehlerprüfung

Das Modul empfängt httperror eine Benachrichtigung, wenn eine Antwort über gesendet (RQ_SEND_RESPONSE Benachrichtigung) werden. Das Modul überprüft httperror den Statuscode der Antwort und sofort zurück, wenn der Statuscode nicht größer als 400 ist.

Zweitens: Benutzerdefinierte Fehler oder Fehler Ausführliche

Die nächste Prüfung wird durch die Anforderung Herkunft bestimmt (ist die Anforderung eine lokale oder Remote-Anfrage) und die Einstellung der Errormode-Eigenschaft. Die Errormode-Eigenschaft auf DetailedLocalOnly gesetzt, was bedeutet, dass Benutzerdefinierte Fehler für jede Remote-Anforderung generiert werden. Wenn Errormode auf „Custom“ eingestellt ist, dann werden alle Antworten Fehler werden Custom Error. Wenn Errormode wird auf „Detaillierte“ alle Fehler Antworten werden detaillierte Fehler geworden. Die folgende Tabelle verdeutlicht dieses Verhalten:

Wenn das Modul httperror feststellt, dass ein benutzerdefinierter Fehler erzeugt werden muss, sieht es in seine Konfiguration zu sehen, ob es einen passenden Fehler finden kann. Wenn eine Übereinstimmung gefunden wird, sendet er die statische Datei, leitet die Anforderung oder führt die URL angegeben. Wenn keine Übereinstimmung gefunden werden kann, senden Sie IIS eine grundlegende einzeilige Meldung den Statuscode enthält. Der nächste Abschnitt erklärt die benutzerdefinierten Fehler Konfiguration im Detail.

Wenn custerr.dll feststellt, dass ein detaillierter Fehler erzeugt werden muss, wird ein weitere Überprüfung erforderlich. IIS berührt die Antwort, wenn ein Modul an das Unternehmen zu der Antwort mit einer eigenen Fehlerbeschreibung überwiegt. Es könnte wertvolle Informationen enthalten. ASP.NET ist ein gutes Beispiel. Die Einheit einer ASP.NET-Fehlerreaktion könnte die Ausnahme-Stack und eine eigene Fehlerbeschreibung enthalten. Ein detaillierter Fehler wird nur erzeugt, wenn das Unternehmen der Körper der Antwort leer ist.

Konfiguration

Hier ist der IIS benutzerdefinierte Fehler Abschnitt auf einem sauberen erhalten installieren:

Sie sehen, dass, wenn der Statuscode einer Antwort 401 ist, IIS eine Datei mit dem Namen 401.htm zurückkehren wird.

Sub-Statuscodes

Viele HTTP-Fehler haben einen Unterstand. Die IIS-Standard Benutzerdefinierte Fehler Konfiguration unterscheidet nicht basierten Unterstatuscodes. Es sendet die gleiche benutzerdefinierte Fehlerseite, wenn Sie die falschen Anmeldeinformationen (401,1) eingeben, oder wenn Sie Zugang erhalten verweigert basierend auf ungültige Rechte auf eine Datei zuzugreifen (401,3). Sie können die verschiedenen Unterstatuscodes in den Log-Dateien oder über detaillierte Fehler sehen. Hier ist eine Liste der verschiedenen 404 Unterstatuscodes, die IIS erzeugt:

Das Anforderungsfilterungsmodul lehnte einen Antrag mit einem zu langen Abfrage-String.

Sie können den httperrors Abschnitt konfigurieren für bestimmtes Unterstatuscodes einen benutzerdefinierten Fehler zu zeigen. Wenn Sie die folgende Zeile in dem httperrors Konfigurationsabschnitt hinzuzufügen, gibt IIS 404_3.htm, wenn eine Datei mit der Dateierweiterung beantragt wird, die nicht im Preis enthalten ist in der IIS MimeMap ( Konfigurationsabschnitt).

Hier ist, wie das Beispiel der Arbeit zu machen:

Die Dateierweiterung .yyy ist nicht Bestandteil des IIS MimeMap und der statische Datei-Handler wird es nicht dienen.

Neu in IIS: Sprachspezifische Benutzerdefinierte Fehler

Jeder aktuelleren Browser enthält die Sprache des Kunden als Request-Header. Hier ist ein Beispiel dafür, wie dieser Header aussehen könnte:

Die Syntax und die Registrierung von Sprachen, wird in RFC1766 spezifiziert.

Wenn ein Fehler zu erzeugen, nimmt IIS diesen Header berücksichtigt werden, wenn es für die Datei benutzerdefinierte Fehler sieht es zurückgibt. Er erzeugt den Pfad für den benutzerdefinierten Fehler unter Verwendung der folgenden Logik:

prefixLanguageFilePath Konfigurationseinstellung (zum Beispiel C: \ inetpub \ custerr) +
Accept-Language-Header durch den Client (zum Beispiel en-us) gesendet +
Pfad Konfigurationseinstellung (zB 404.htm)

Wenn der Browser eine Anforderung für eine nicht vorhandene Ressource sendet und die „Accept-Language“ Header hat den Wert von „en-us“, die Datei, die wird c zurückgegeben wird: \ inetpub \ custerr \ en-us \ 404. htm.

wenn Sie aus Deutschland sind zum Beispiel, mögen Sie Ihre Fehlermeldungen in deutscher Sprache. Um dies zu tun, müssen Sie das Windows Vista Language Pack Deutsch installieren. Dies schafft die c: \ inetpub \ custerr \ de-DE-Verzeichnis mit benutzerdefinierten Fehler enthaltenen Dateien. Nun, wenn der Browser sendet die "Accept-Language" Header mit dem Wert von „de-DE, die Datei, die wird c zurückgegeben wird: \ inetpub \ custerr \ de-DE \ 404.htm.

IIS wird immer wieder auf die Systemsprache fallen, wenn das Verzeichnis „de-DE“ existiert nicht.

Internet Explorer können Sie die Accept-Language-Header konfigurieren. Gehen Sie auf „Extras“ - „Internetoptionen“, wählen Sie die Registerkarte „Allgemein“ und klicken Sie auf die „Sprachen“ drücken.

Benutzerdefinierte Fehleroptionen

In den obigen Beispielen sendet IIS den Inhalt der Datei als benutzerdefinierte Fehlerantwort. IIS hat noch zwei weitere Möglichkeiten, um einen Fehler zu reagieren: durch eine URL ausgeführt wird oder durch die Anforderung umgeleitet wird.

ExecuteURL

Sicherheitsüberlegungen

Ein Wort der Vorsicht: Aus architektonischen Gründen kann IIS ausführen nur die URL, wenn sie in der gleichen Anwendung Pool befindet. Verwenden Sie die Umleitungsfunktion einen benutzerdefinierten Fehler in einem anderen Anwendungspool auszuführen.

IIS kann auch einen 302-Redirect an den Browser zurück, wenn ein bestimmte Fehler auftritt. Redirect ist gut, wenn Sie eine Serverfarm haben. Zum Beispiel können Sie alle Ihre Fehler an eine zentrale Stelle umleiten, die Sie genau überwachen.

Es besteht die Gefahr jedoch: responseMode = „File“ (das ist die Standardeinstellung) können Sie jede Datei auf der Festplatte angeben. Das wird nicht funktionieren, wenn Sie sehr sicherheitsbewusst sind.

Ein praktikable Szenario könnte gehört nur die Delegation der Errormode-Einstellung ermöglicht. Dies ermöglicht es, einen Entwickler detaillierten Fehler für seine Anwendung zu erhalten, auch wenn er ein Remote-Client verwendet. Alles, was notwendig ist, ist Errormode = „Detailed“ zu setzen. Hier ist, wie dieses Szenario zu konfigurieren:

Lassen Sie die Delegation des httperrors Abschnitt:

Zweitens gehen die Abschnitt in applicationHost.config und es ändern, so dass nur Errormode delegiert:

Individuelle und detaillierte Fehler sind leistungsfähige IIS-Features. Sie helfen Ihnen, Probleme zu beheben, ohne die Sicherheit Ihres IIS-Server zu beeinträchtigen. Viele Konfigurationsoptionen helfen Ihnen, benutzerdefinierte für Ihre Benutzer zuzuschneiden Erfahrung. Am wichtigsten ist: damit ist das Experimentieren Spaß.