Robert Bienert: Weitere Erkenntnisse

Beitrag lesen

Moin!

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.

Falsch! Was macht denn ein Gecko z.B. wenn er ein <object> eines ihm unbekannten Typs findet? – Er sucht nach einem passenden Plugin. Insofern ist die Behauptung des Useragents, dass er mit allem etwas anfangen kann vollkommen korrekt. So, wie der IE ins System eingebunden ist, geht wahrscheinlich auch er davon aus, dass er mit einem bestimmten MIME-Type etwas anfangen kann.

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.

Das stimmt leider, wobei mir unklar ist, warum. Schließlich kann man mit Content Negotiation auch den Traffic senken: Bei der Auswahl zwischen index.html und index.html.gz (gzipte Variante von index.html) bekommen moderne Browser™ die komprimierte Version.

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 muss dabei zugeben, dass ich text/plain nur wegen lynx mit verwendet habe. Bei der Auswahl zwischen HTML und XHTML hätten Safari und der MacIE wahrscheinlich HTML serviert bekommen. Wahrscheinlich traut der Apache Useragents, die „Accept: */*“ sagen, nicht.

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 ^^

Theoretisch schon. Aber weißt du, was die Besucher deiner Seite, die mit dem IE unterwegs sind, davon halten, wenn der IE ihnen bereits die Startseite zum Download anbietet („unbekannter Typ: application/xhtml+xml“).

Da habe ich mal eine Frage an die Windowsbenutzer: Trägt Firefox/Seamonkey nicht in der Registry ein, dass er application/xhtml+xml mag? Dann müsste der IE statt eines Downloaddialoges doch diese Anwendung öffnen – sofern installiert.

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...)

Weitere Infos zu diesem Thema findest du übrigens in den SELFHTML-Artikeln Alternative Dokumentinhalte via HTTP sowie Ermitteln der Sprache des Browsers.

Desweiteren dachte ich analog zur "Dein Browser unterstützt keine Frames, get Netscape" einen text/plain auszugeben mit dem Inhalt:

Das ist doch gar nicht nötig: Welcher Browser kann denn kein HTML _interpretieren_? Und selbst dem IE kannst du XHTML als HTML verkaufen.

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.

Private Seite oder nicht ist vollkommen gleichgültig. Was ist dir lieber: Kunden oder die Freunde verprellen? Also, schreib vernünftigen Code und so viele Hacks sind es ja gar nicht, damit auch der IE etwas damit anfangen kann. Das „kauf dir nen Mac“ kannst du dir dann immer noch für zwischendurch aufheben.

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 ^^

Nein, der eleganteste Wert ist, erst gar keine Fehler entstehen zu lassen. Undefinierte Variablen oder Array-Werte kann man in PHP wunderbar mit empty() oder array_key_exists() überprüfen.

Viele Grüße,
Robert