Hi Sandra,
und wo fange ich als völlig ahnungslose frau nun an?
Hoppla - vorher klangst Du aber nicht so mutlos!
ich habe echt keine ahnung, was du da beschreibst...
Also:
1. Zum Thema "Browserweiche in JavaScript" wirst Du im Forum-Archiv reichlich fündig, da gehe ich jetzt mal nicht ins Detail. Mit "document.layers" und "document.all" hast Du auch passende Suchbegriffe.
2. Wenn Du serverseitig eine Browser-Erkennung über den UserAgent-String machen willst, woher nimmst Du den?
Aus einer Environment-Variable, weil das CGI-Interface (zumindest das des Apache) alle HTTP-Header dort als Variablen ablegt.
Wenn Du aber den UserAgent dort prüfen kannst, dann geht das mit jedem anderen Header-Feld genauso!
Verstehen, was die diversen Inhalte bedeuten, das mußt Du in jedem Fall.
Dazu kannst Du Dir einerseits ansehen, was in den Headern steht (Methoden habe ich Dir genannt - vor allem über Dein Apache-Log kommst Du schnell an große Datenmengen), oder andererseits in den Konfigurationen der einzelnen Browser nachsehen.
Bei Mozilla gibt es beispielsweise eine Konfigurationsdatei (defaults/pref/all.js), in der Du einen nennenswerten Teil der HTTP-Header nachsehen (und auch ändern!) kannst. (Das ist halt der Trend bei den modernen Browsern - sie geben den Benutzern immer mehr Möglichkeiten, zu bestimmen, was genau sie dem Serve sagen wollen und was nicht.)
Bei M$IE 5 stehen zumindest die Werte der "Accept:"-Liste in der Registry. Schau Dir mal "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Internet Settings/Accepted Documents" an, da stehen die einzelnen Werte der Liste drin. Und bestimmte installierte Programme hängen sich da hinten dran - insbesondere natürlich die Micro$oft-Produkte. Wenn Du einen Browser antriffst, der Deinem Server explizit erzählt, daß er Micro$ofts PowerPoint-Format verstehen würde - na, was wird das für ein Browser sein?
Teilweise kannst Du sogar aus der Reihenfolge der Werte Deine Schlüsse ziehen ... wahrscheinlich sogar aus der Reihenfolge der gesendeten HTTP-Header! Denn die ist laut HTTP ziemlich beliebig, und es wäre doch ein irrer Zufall, wenn zwei Browser da unbedingt dieselbe Reihenfolge verwenden würden. Die Frage ist nur, ob Du an diese Reihenfolge noch heran kommen kannst - über die normale CGI-Schnittstelle bin ich mir nicht sicher. (Ich weiß nicht, in welcher Reihenfolge der Apache die einzelnen Environment-Variablen setzt und ob Du in PHP oder Perl auf diese Reihenfolge noch irgendwie zugreifen kannst.)
Ich habe nicht behauptet, daß das nicht in ziemlich viel Arbeit ausarten könnte. Aber - es würde Dir die Information liefern, die Du haben willst! Und zwar erheblich zuverlässiger, als dies der UserAgent-String tut.
Schau Dir nur weiter oben im Forum die Diskussion über den Opera-Marktanteil an ... hier wäre vielleicht ein Ansatz, sehr viel zuverlässigere Zahlen zu bekommen.
Was _ich_ nun ganz toll fände, das wäre, wenn Du diesen Wert konsequent gehst und am Ende Deine Erkenntnisse in Form eines kleinen Feature-Artikels zusammenfaßt. Ich kann mich an keinen Forum-Beitrag zu diesem Thema erinnern - hier würdest Du meines Wissens im Bereich von HTTP völliges Neuland betreten. (Das soll Dich jetzt motivieren, ey - nicht erschrecken! ;-)
Und eine zuverlässige (!) serverseitige Browser-Weiche, dafür würden sich vermutlich eine Menge Leser interessieren ... und Dir über weitere Threads sicherlich auch gerne Testdaten zahlreicher Exoten-Browser liefern, welche bei Dir nicht installiert sind. Wir können das Thema gerne auch per Mail weiter vertiefen ... aber den Artikel möchte ich Dir nicht wegnehmen. Ich habe schon welche ... ;-)
Die Methode, die ich einer solchen Browser-Erkennung zugrunde legen würde, habe ich natürlich nicht selbst erfunden, sondern nur adaptiert.
Denn ungefähr so versuchen Hacker, fingerprints von Rechnern zu bekommen, indem sie auf irgendwelchen niedrigeren Netzwerkebenen Pakete an eine Maschine senden und sich dann die Art (z. B. auch das Zeitverhalten!) der Reaktion ansehen. Selbst ein Server, der ein Paket einfach nur ablehnt, tut das nicht exakt so wie ein beliebiger anderer Server!
Genau das selbe Prinzip könntest Du bei HTTP anwenden: Du wendest zur Browser-Erkennung nicht den UserAgent-String aus, sondern möglichst viele Header.
Als Beispiel aus dem normalen Leben: Wenn Du mit jemandem sprichst und dieser Dir seinen Namen sagt, dann hast Du aus diesem Namen nur sehr geringe Informationen darüber, wo Dein Gesprächspartner z. B. wohnt. Aber Du hast in diesem Falle die Möglichkeit, auch seinen Tonfall, seinen "Dialekt" auszuwerten.
Genau das schlage ich Dir - übertragen ins HTTP-Universum - vor. Je genauer Du "zuhörst", desto besser wirst Du die Browser "verstehen".
Viele Grüße
Michael
(den ein solcher Artikel übrigens auch sehr interessieren würde)