XHTML und der richtige MIME-Typ
Artikel vom 4. Oktober 2004 (↻ 5. April 2006), exklusiv für Dr. Web. ISSN 1614-3124, #8. Schwerpunkt: Webentwicklung (RSS-Feed für alle Themen).
Wer XHTML als Basis fĂĽr seine Webseiten verwendet, weiĂź oft nicht, dass der MIME-Typ text/html
hier falsch ist. XHTML sollte als application/xhtml+xml
ausgegeben werden, und über PHP oder Apaches .htaccess ist dies rasch konfiguriert – nur dem Internet Explorer kommt eine Sonderrolle zu.
Standardkonform vorgehen
Das W3C definiert, dass HTML-Dokumente mit den MIME- (Multi-Purpose Internet Mail Extension) oder Medientyp text/html
, XHTML-Seiten jedoch als application/xhtml+xml
ausgeliefert werden sollten, auch wenn prinzipiell auch die MIME-Typen application/xml
sowie text/xml
zulässig sind. Eine Ausnahme ist, dass zumindest bei Gebrauch von transitionellem XHTML, also dem Dokumenttyp XHTML 1.0 Transitional, text/html
weiterhin erlaubt, wenn auch nicht empfohlen wird.
Nach ehemaliger Korrespondenz mit Anne van Kesteren und auf späteren Hinweis von Markus Stange muss ich das korrigieren – XHTML 1.0 »kann ruhig« in allen Ausprägungen als text/html
ausgegeben werden.
Den MIME-Typ application/xhtml+xml
zu verwenden hat allerdings auch nicht nur den Vorteil, dass man die Standards beherzigt, sondern man ist grundsätzlich auch Nutznießer zweier großer Vorteile von XHTML, nämlich Fehlerbehandlung und echte Interoperabilität mit anderen XML-Derivaten.
Die Umsetzung ist prinzipiell einfach: In PHP lässt sich der anzupassende HTTP-Header Content-Type
durch
<?php header("Content-type: application/xhtml+xml"); ?>
ändern, und auch über die Konfiguration des Apache-Webservers (in diesem Artikel wird die Datei .htaccess als Beispiel verwendet, da viele Betroffene bzw. Interessierte nicht unbedingt Zugriff auf die Datei httpd.conf haben) würde
AddType application/xhtml+xml .html
bereits genügen (für Dateien mit der Erweiterung ».html«) – wenn es nicht User-Agents gäbe, die hiermit Probleme haben, weil sie den MIME-Typ application/xhtml+xml
nicht unterstützen. Eines der prominentesten Beispiele hierfür ist der Internet Explorer, der den Download-Dialog öffnet, wenn ihm eine application/xhtml+xml
-Ressource begegnet. Glücklicherweise lässt sich dieses Dilemma mit ein paar Handgriffen lösen, indem man zum Beispiel auf die Möglichkeiten von PHP zurückgreift (siehe auch Michael Jendryschiks modifizierte Variante):
<?php
if ( stristr($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml") ) {
header("Content-type: application/xhtml+xml");
} else {
header("Content-type: text/html");
}
?>
Alternativ macht man Gebrauch von der .htaccess und den Fähigkeiten von Apaches mächtigem mod_rewrite
-Modul:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml
RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml\s*;\s*q=0
RewriteCond %{REQUEST_URI} \.html$
RewriteCond %{THE_REQUEST} HTTP/1\.1
RewriteRule .* - [T=application/xhtml+xml]
Beide Varianten sorgen dafür, dass nur den User-Agents der »richtige« MIME-Typ serviert wird, die vorgeben, ihn auch zu akzeptieren: So erhalten zum Beispiel auf der Gecko-Engine basierende Browser wie Firefox das Dokument als application/xhtml+xml
(nachvollziehbar zum Beispiel über den Kontextmenüeintrag »Seiteninformationen anzeigen« bzw. »View Page Info«), während dem Internet Explorer das Dokument in ihm zuträglicher Manier als text/html
geliefert wird.
Auf die genaue Erläuterung jeder Zeile wird an dieser Stelle verzichtet, weil hierzu weiter ausgeholt werden müsste; ebenso sind selbstverständlich diverse Modifikationen möglich, wie zum Beispiel im Falle der .htaccess bei Verwendung von Verzeichnis-Indices (zur Übersicht über alle Dateien in einem Ordner) REQUEST_URI
durch REQUEST_FILENAME
zu ersetzen, da diese sonst weiterhin nur als text/html
ausgeliefert werden wĂĽrden.
Am Schluss ist noch eine Warnung loszuwerden, weil dieser Artikel bzw. sein Autor keine Hilfestellung bei Problemen gibt und geben kann; so trivial diese wichtige, standardkonforme Anpassung auch ist, kann sie anfangs zu Problemen führen: CSS-Selektoren sind bei Verwendung mit XML-Dokumenten case-sensitive, die populäre Auskommentierung der Inhalte von script
- und style
-Elementen muss, wenn diese beibehalten werden soll, modifiziert werden, um zu vermeiden, dass die Inhalte ignoriert (weil ja kommentiert) werden, und bei ausgiebigem Gebrauch von Skripten ist darauf hinzuweisen, dass document.write()
nicht mehr funktionieren wird. Hierzu bietet Ian Hicksons Artikel Sending XHTML as text/html
Considered Harmful detailliertere Informationen.
Nachtrag (11. Februar 2006)
Via Roger Johansson: Um dem W3C-Validierer ebenfalls application/xhtml+xml
vorzusetzen, kann die zweite Zeile der obenstehenden PHP-Abfrage durch die folgende ersetzt werden:
if ( stristr($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml") ||
stristr($_SERVER["HTTP_USER_AGENT"],"W3C_Validator")) {
Dazu kann es laut Dirk Taggesell unter bestimmten Umständen zu Problemen mit Proxies kommen. Bei einer Anfrage nach einem Dokument, das als application/xhtml+xml
ausgeliefert wird, könnte der Proxy auch alle weiteren Dokumente mit diesem MIME-Typ ausliefern. Sollte also eine weitere Anfrage von einem User-Agent erfolgen, der application/xhtml+xml
nicht unterstützt, wäre dies problematisch. Persönlich konnte ich dieses Problem bislang jedoch nicht reproduzieren oder andersartig bestätigen.
Ăśber mich
Ich bin Jens (lang: Jens Oliver Meiert), und ich bin ein Frontend-Engineering-Leiter und technischer Autor/Verleger. Ich habe als technischer Leiter für Firmen wie Google und als Engineering Manager für Firmen wie Miro gearbeitet, bin Mitwirkender an verschiedenen Webstandards und schreibe und prüfe Fachbücher für O’Reilly und Frontend Dogma.
Ich experimentiere gerne, nicht nur in der Webentwicklung (und im Engineering Management), sondern auch in anderen Bereichen wie der Philosophie. Hier auf meiert.com teile ich einige meiner Ansichten und Erfahrungen. (Sei kritisch, interpretiere wohlwollend und gib Feedback.)
Ähnliche Beiträge
Das könnte dich ebenfalls interessieren:
- HTTP-Header, Meta-Elemente und Sprachinformationen
- HTML: Die 3 Grundregeln
- Maßnahmen zur Qualitätssicherung von Websites
Freund von optimiertem HTML? Probier Upgrade Your HTML (2019–2024). Gutes HTML ist nicht einfach. Minimales HTML wird unterschätzt. HTML aus dem Alltag kann man oft verbessern. Diese Buchserie macht das. Erhältlich bei Amazon, Apple Books, Kobo, Google Play Books und Leanpub.