Moin!
Dabei haben sich gerade ein paar interessante Dinge eröffnet:
Safari kann auch nichts außer */*
Das hast du schön gesagt, bedeutet doch */*, dass der Useragent _alles_ kann. Damit heißt dein Satz also
„Safari kann auch nichts außer allem.“
Das ist mir klar, aber wie oben beschrieben würde ich die Angabe */* am ehesten so interprettieren, dass der Browser herunterladen kann (denn so verarbeitet ein Browser ja normalerweise Inhalte, die er nicht auswerten kann). Dass das eine vage Annahme ist ist mir durchaus bewusst, aber andernfalls macht */* auch nur sehr wenig Sinn.
Dafür gibt es ein nettes Apache-Feature namens Content Negotiation, du brauchst also das Rad gar nicht noch einmal zu erfinden.
Interessant... ich kann bei einem fremden Hoster (und ich benutze einen) derartige Einstellungen nur selten vornehmen.
Nehmen wir ein Verzeichnis mit folgenden Dateien: index.html, index.html.gz, index.xhtml, index.xhtml.gz, index.txt, index.txt.gz und eingeschaltetetem Content Negotiation, dann erhalten folgende Browser folgende Seiten vom Apachen:
• Camino (Gecko): index.xhtml.gz
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8, …)
• Safari (WebKit): index.txt.gz
Accept: */*)
• Internet Explorer Mac: index.txt
Accept: */*)
Da finde ich es aber fraglich, warum man den Browsern, die ja "alles" verstehen ausgerechnet text/plain sendet. Ich meine... ich würde es auch so ähnlich handhaben, aber eigentlich sagt der Browser - wie du oben erwähntest - "Ich kann alles!". Tja, dann kann ich ihm ja auch liefern was ich will ^^
Naja, in der Tat hatte ich vor auch noch eine Rangfolge wie der Server (bzw. Autor) es ausliefern will zu schreiben. Also werde ich quasi festlegen, dass ich am liebsten in xhtml ausliefere, dann in html und dann in wml2(XHTMLmp) und dann in wml1. Diese Liste wird dann mit dem zurück gegebenen array verglichen, also wenn unter den höchsten q-Werten (wahrscheinlich 1) application/xhtml+xml steht, dass dann eben auch das ausgeliefert wird. Aber da text/html möglichweise ja auch q=1 hat muss ich mich wohl entscheiden und daher die Prioritäten-Liste. (Vieleicht stelle ich wml1 ja sogar ganz an den Anfang...)
Desweiteren dachte ich analog zur "Dein Browser unterstützt keine Frames, get Netscape" einen text/plain auszugeben mit dem Inhalt:
Dein Browser unterstuetzt kein gaengiges hypertext-Format.
Bitte nutze einen Browser, der Hypertext unterstuetzt. Zum Beispiel:
Systemuebergreifend:
Mozilla FireFox ( http://mozilla.com )
Opera ( http://www.opera.com/lang/de/ )
Netscape Navigator ( http://browser.netscape.com )
Mozilla SeaMonkey ( http://www.mozilla.org/projects/seamonkey/ http://www.seamonkey.at )
HotJava ( http://java.sun.com/products/hotjava/3.0/ )
Microsoft Windows:
K-Meleon ( http://kmeleon.sourceforge.net/wiki/ )
Linux und Unix:
Epiphany ( http://www.gnome.org/projects/epiphany/ )
Galeon ( http://galeon.sourceforge.net )
Konqueror ( http://www.konqueror.org )
fuer mobile Geraete:
Opera ( http://www.opera.com/products/mobile/ )
Das ist total unschön und auch verwerflich (ja, das weiß ich), aber ich betone, dass ich diese Technik für eine sehr private und unkommezielle Seite verwenden werde. (Die Liste stammt übrigens aus Wikipedia und wurde abgeglichen ob diese Browser denn text/html o.ä. angeben).
Aus der Praxis wissen wir aber, dass Safari auch XHTML kann und der HTML versteht.
Absolut, aus der Praxis wissen wir auch, dass der IE html halbwegs versteht (also i.d.R. irgend etwas ausgibt, was man lesen kann und was inhaltlich das ist, was man haben wollte). Die Frage ist doch, warum enthalten uns manche Browser-Schreiber diese Information vor? Wenn der User sie verbergen will, dann kann/sollte man das einfach einstellen können. Ich halte die Empfehlung vom W3C für ideal, ein Browser sollte alles angeben, was er kann und gegebenenfalls auch besagten q-Wert. Als Webseiten-Schreiberling kann ich dann ja immernoch entscheiden, wie ich mit dieser Angabe umgehe (ganz ignorieren, q-Wert ignorieren, oder eben nicht...).
Das kann man aber auch programmiertechnisch eleganter lösen.
Bestimmt, z.B. mit display:none oder die Fehler in eine Datenbank schreiben oder in eine Datei oder... ich habe den einfachsten Weg gewählt ^^