Diese Frage kommt einem vielleicht nicht so leicht in den Sinn, weil man von jedem Webserver erwarten würde, dass er in der Lage ist die Inhalte meiner Website an Browser auszuliefern.

Und in der Tat, schafft der IIS diese Anforderung in der Default Installationsvariante. D.h. wenn Sie den IIS 7 installieren, beinhaltet die Standardinstallation alle IIS-Module, die erforderlich sind, um statische HTML-Dateien, Dokumente und Bilder auszuliefern.

servermanager add default iis role

Meist wird dieses Work Load Szenario mit anderen Work Loads kombiniert z.B. um zusätzlich Seiten auszuliefern, die in PHP oder ASP.net geschrieben worden sind.

Was sind statische Inhalte und wo liegen die im IIS?

In Jetzt geht's los – "Die erste Webseite." haben wir gesehen, dass die Inhalte meiner Website letztlich auf der Festplatte des Servers liegen (auch remote Share ist möglich). Liefert ein Webserver den Inhalt (z.B. aus einer .html Datei) welcher beim ihm auf Platte liegt genauso beim Browser ab, dann spricht man von statischen Inhalten.

Was sind dann dynamische Inhalte?

Liegen auf dem Server dagegen Code Dateien (.php, .asp,.aspx, etc.) wird erwartet, dass der Browser nicht Quellcode bekommt sondern dass der IIS Server die Code-Dateien nach abzuarbeitenden Code durchsucht (interpretiert) diesen kompiliert, ausführt und die Antwort Browser verständlich (z.B. html (+javascript) )zurückschickt – dabei spricht man von serverseitigen dynamischen Inhalten.

Serverseitig(er) versus Browserseitig(er-Code):

Serverseitige dynamische Inhalte (siehe auch Server-side scripting) werden auf dem Webserver bearbeitet und dienen meist dazu interaktive Websites bereitzustellen, die z.B. Inhalte aus Datenbanken darstellen (wie z.B. Webshops, CMS, Blog, o.ä.).

Daneben gibt es auch noch Inhalte/Skripte die im Browser ausgeführt werden (Client-side scripting) und dadurch die Darstellung / Interaktivität einer Website beeinflussen. In der Regel sind diese Inhalte in JavaScript geschrieben und im html eingebettet oder zugeladen.

Anm.: Da Serverseitig kein Javascript ausgeführt wird ist aus der Sicht des Webserver javascript statischer Inhalt – und wird entsprechendem Mime-Type Eintrag wie folgt ausgeliefert:

javascript mime type

Mime-Type: Oder wo wird festgelegt welche Datei-Endungen als statische Inhalte gelten?

Welche Datei-Erweiterungen (in der URL) für den IIS als statisch gelten definiert man bei den Einstellungen für die MIME-Typen (siehe auch Internet media type – Wikipedia). Hier wird eine Liste aller Dateitypen hinterlegt die als statisch gelten.

Anm.: Einträge für dynamische Dateien (z.B. php ) sucht man deshalb hier vergebens.

mime types

Mime-Types haben die wichtige Aufgabe das übermittelte zu klassifizieren also zu beschreiben was da überhaupt vom Server gesendet wird (z.B. Text, Bild, Zip, etc.) – also ähnlich wie Dateiendungen.

Da man sich aber nicht (mehr) auf die Dateiendung in der URL Zeile verlassen möchte ist gerade für Browser der korrekte Mime-Type zum übermittelten Inhalt besonders wichtig. Warum?:

Nur wenn der Browser weiß was er vom Server bekommen hat, kann er den Inhalt richtig darstellen.

Mit einem Mime-Type Eintrag sage ich dem IIS welche Dateiendung statischen Inhalt transportiert und welchen Mime-Type der IIS beim Ausliefern einer solchen Datei an den Browser mitschicken soll:

mime-type text_html

Wenn ich Browser nun z.B. die "start.html" von meinem IIS aufrufe, dann bekomme als Antwort im Http-Protokol Header "Content-Type" den eingetragenen Mime-Type ausgeliefert:

wfetch content-type

[Download zu wfetch Tool]

Mime-Types bearbeiten? - Oder 404.3 Fehler bei unbekannten Dateiendungen!

Wenn Sie diese Fehlermeldung sehen:

HTTP Error 404.3 - Not Found

The page you are requesting cannot be served because of the extension configuration. If the page is a script, add a handler. If the file should be downloaded, add a MIME map.

, dann haben Sie wahrscheinlich von ihrem IIS eine Datei aufgerufen dessen Datei-Endung und Mime Type dem IIS nicht bekannt ist.

Hintergrund: Statische Inhalte für die im IIS kein Mime-Type definiert ist werden nicht ausgeliefert – der IIS antwortet mit einer 404 (.3) Not Found Fehlermeldung.

Abhilfe: Der IIS hat zwar eine Standardliste mit Verknüpfungen von Datei-Endungen zu bekannten Mime-Types, dennoch kann es vorkommen, dass man diese Liste selbst erweitern muss (siehe auch z.B. Configuring IIS for Silverlight Applications)

Beispiel: Um statische Inhalte vom Typ Scalable Vector Graphics (.svg Dateien) vom IIS7 ausliefern zu können muss ein neuer Mime-Type Eintrag gesetzt werden (siehe auch Adding IE 9 MIME Types to IIS 7)

Als Test .svg-Datei kann z.B. der Variable Resistor von Wikipedia dienen. Ich platziere diese Datei in meinem c:\inetpub\wwwroot Ordner (=Standard Web Site).

Ohne zusätzlichen Mime-Type Eintrag bekomme ich, im Browser:

svg mime type error 404.3

Wir fügen jetzt den notwendigen Mime-Type hinzu:

IIS Management Konsole -> Server Namen auswählen -> Mime-Types Feature auswählen -> Open Feature -> Mit "Add" einen neuen Eintrag festlegen:

File name extension

.svg

MIME type:

image/svg+xml

add svg mime type

Ein erneuter Aufruf im Browser erzeugt keinen Fehler und die Vektor Grafik wird korrekt dargestellt:

variable resistor

Wo bekomme ich den Mime-Type für ein Dateiformat her?

Kurz: Im Internet ;-)

Bei der Internet Engineering Task Force (Wikipedia Eintrag zur IETF) liegen die sog. RFC – Beiträge aus, die u.a. dokumentieren wie die Mime-Typen zu setzen sind.

Anm. d. Autors: Ich musste noch nicht die RFC konsultieren um einen Mime-Type für einen Datei-Type herauszufinden, meist existiert ein Wikipedia Eintrag der den Mime-Type gleich mit angibt oder alternativ hilft eine Suchanfrage nach der Dateiendung und "Mime-Type".:

Wer hat die Antwort auf statische Inhalte - oder was macht der StaticFile Handler?

"Handler Mappings" im IIS7 legen fest, wer die Antwort auf eine http Anfrage übernimmt:Die Zuordnung welcher Handler für welche Anfragen zuständig ist geschieht auf Basis des angefragten Dateityps:

handler mappings

Ein IIS7 soll in der Regel viele unterschiedliche Inhalte (.html, .php, .asp, .aspx, etc.) ausliefern können. Je nachdem ob es ich dabei um statische oder dynamisch Inhalte handelt, ergeben sich daraus unterschiedliche Anforderungen an die Darstellung: Dynamische Inhalte müssen vor Versand noch "aufbereitet" (z.B. kompiliert) werden – statische Inhalte zuvor von der Platte geholt werden. Das erklärt die zahlreichen Handler-Einstellungen. Mehrfachbelegungen sind möglich, je nach Konfiguration bestimmt der IIS7 dann welcher Handler für eine Anfrage genommen wird.

Für alle statischen Inhalts-Dateitypen gibt es Default nur ein Handler-Mapping : Das StaticFile-Handler Mapping:

static file handler mapping

Anstatt für alle statischen Inhalte / Dateiendungen (.htm, .html, .jpg, etc. ) jeweils ein Handler-Mapping zu haben, verwendet der IIS7 ein Wildcard Mapping im Pfad ("*"). Die eigentliche Arbeit übernehmen die eingetragenen Handler: z.B. das StaticFileModule.

Das StaticFileModule liest den Inhalt einer Datei passend zur http Anfrage von der Festplatte und übergibt diesen als http Antwort.

Fehlt das StaticFileModule bekommt man bei einer Anfrage auf statische Inhalte o.ä.:

HTTP Error 500.21 - Internal Server Error

Handler "StaticFile" has a bad module "StaticFileModule" in its module list

Fehlt das Handler-Mapping für statische Inhalte erzeugt eine http-Anfrage darauf o.ä.:

HTTP Error 404.4 - Not Found

The resource you are looking for does not have a handler associated with it.

Tipp:

Wer wissen möchte welches Handler-Mapping für eine bestimmte http Anfrage vom IIS ausgewählt worden, kann das IIS7 Failed Request Tracing aktivieren:

z.B. "slow.aspx" (ASP.NET 4.0)

Handler Changed aspnet40

NewHandlerName="PageHandlerFactory-Integrated-4.0", NewHandlerModules="ManagedPipelineHandler", NewHandlerScriptProcessor="", NewHandlerType="System.Web.UI.PageHandlerFactory"

 

"start.html"

Handler Changed static file

NewHandlerName="StaticFile", NewHandlerModules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule"

 

Zusammenfassung:

Handler sind Komponenten im IIS7 und erzeugen den Inhalt den der IIS als http Antwort schickt.

Für den IIS7 sind Inhalte | Datei-Erweiterungen statisch (.html, .jpg, .css, etc. ), wenn dafür ein gültiger Mime-Type angegeben ist.

Für alle statischen Inhalte greift standardmäßig ein Handler Mapping -"StaticFile".

Dieses Mapping legt u.a. fest, dass das StaticFileModule den Inhalt passend zur http Anfrage von Festplatte lesen und als http Antwort zurückgeben soll.

 

Links:

Install Typical IIS Workloads : Installing IIS 7 : Installing and Configuring IIS 7

Deploying a Static Content Server (IIS 7)

IIS 7 Modules Overview : Introduction to IIS 7 Architecture