Sie sind in Kategorie Opera

Brotkrumennavigation


Donnerstag, 28. Mai 2009

Opera 10 Alphas Browserkennung lügt

Schlagworte: , , , ,
28.05.2009 · 09:29
Seit der gestrigen Weekly hat Opera die Browserkennung (user agent string) geändert. Warum dies? Weil manche Webseiten Browsersniffer, also server- oder browserseitige Skripte verwenden, um zu erkennen, welcher Browser welche Fähigkeiten hat. Eigentlich eine gute Sache, dieses Browsersniffing.

Browsersniffing wird meist dazu verwendet, um veraltete oder fehlerhafte Browser zu erkennen und denen Patches auszuliefern. Beim Browsersniffing wird die Versionsnummer der Browser aus dem user agent string (UAS) extrahiert und dann je nach Browser in die Webseite ein anderes HTML, Stylesheet oder Javascript eingesetzt.

Soweit, so gut.

Das hat allerdings auch Haken, wenn nur nach der Versionsnummer gefragt wird.

In früheren Zeiten bewegte sich die Versionsnummer von Null bis Neun, heutzutage hat jedenfalls ein Browser, nämlich Opera 10 Alpha diese Marke gesprengt.

Opera 10α hatte beispielsweise den folgenden UAS:
Opera/10.00 (Macintosh; Intel Mac OS X; U; en) Presto/2.2.0.

Bei manchen Webseiten führte die 10.00 zu merkwürdigen Ergebnissen in der Anzeige oder bei Javascript-Anwendungen. Das Browsersniffing erkannte den Browser als Opera 1, ein Browser der völlig veraltet ist und bestimmte Eingenschaften nicht darstellen kann. Daraufhin wurde auf den Webseiten entweder eine inkorrekte Fehlermeldung über einen veralteten Browser gezeigt oder in die Webseite einfach ein völlig falscher Code eingesetzt, um auch diesen vermeintlich alten Browser zu unterstützen. Teilweise wurden Besucher auch einfach auf eine Seite umgeleitet, die ihnen einen neueren Browser empfahl; die Webseite konnte nicht angesehen werden, also Aussperrung.

Entstanden sind solche Eskapaden der Webseiten nicht wegen Operas Fehler wie eine denken möchte, sondern durch Schlamperei in der Browsererkennung. Webmaster und -entwickler haben einfach nicht bedacht, dass Versionsnummern auch größer als 10 werden können. Sowas ist ähnlich dem berühmten Jahr-2000-Problem (Y2K-Bug). Oder wie die Probleme mit Flash 10-Anwendungen auf Webseiten, bei denen manche schlechte Erkennungsskripte ein veraltetes Flash-Plugin vermuteten und beim Besuch der Seite immer wieder aufforderten, ein neueres Plugin herunter zu laden, um die Inhalte betrachten zu können.

Was falsches Browsersniffing in Webanwendungen erzeugen kann beschreibt schön ein Problem bei TyinyMCE und Opera 9.5.

Da auch Opera auf das Problem aufmerksam (gemacht) wurde, haben sie sich einen Trick einfallen lassen; sie veränderten die Versionsnummer im UAS.
Ab jetzt verwendet Opera 10α beispielsweise folgenden UAS:
Opera/9.80 (Macintosh; Intel Mac OS X; U; en) Presto/2.2.15 Version/10.00.

Wie zu sehen ist, wurde die wirkliche Versionsnummer einfach hinten angehängt und vorn eine Versionsnummer kleiner als 10 vorgetäuscht, was jedenfalls den „Versionsnummernbug“ beim Browsersniffing beheben sollte.

Dass Opera allerdings bei späteren Versionen nur hinten die Versionsnumer ändern will, irritiert mich. Andreas Bovens, ein Entwickler bei Opera schreibt nämlich im Artikel Changes in Opera’s user agent string format:

we’ve decided to freeze the first part of the string as Opera/9.80 for now, and add the version number in the end — hence the Version/10.00 appendix. This construct allows us to somehow serve the "real" version number, while sidestepping the various double digit-related issues described above. In future releases, we plan to update the Version part. For example, Opera 11 will have a Version/11.00 appendix, and so on.

Da hätte ja Opera gleich einen Mozilla-UAS machen können, der könnte dann beispielsweise so lauten:

Alter UAS:
Opera/10.00 (X11; Linux i686; U; de) Presto/2.2.0
Neuer UAS:
Mozilla/5.0 (X11; U; Linux i686; de) Presto/2.2.0 Opera/10.00

Schließlich hatte Opera doch sowieso schon die Möglichkeit, sich als Internet Explorer oder Firefox zu tarnen, da sollte doch ein Mozilla-UAS nichts schlimmes sein. Aber ich nehme mal an, den Browsernamen im UAS voran zu stellen war wohl eher eine Marketingstrategie oder einfach nur der Stolz auf das Produkt.

Ich bin gespannt, ob Opera die nächsten Jahre immer nur Version 9.x bleiben will.

Besonders gut kommt der „Fix“ des UAS bei normalen Anwendern und Webentwicklern nicht gerade an, wenn ich mir so die Diskussion auf dev.opera ansehe.

Doch zurück zum Sinn des Browsersniffings und der Erkennung der Eigenschaften verschiedener Browser.

Es ist sinnvoller, Eigenschaften eines Browsers nicht über seine Versionsnummer herauszufinden. Warum? Weil der UAS auch geändert werden kann, was manche Browser zulassen und sich so zu verschleiern. Browsererkennung sollte eher über wirkliche Eigenschaften wie bestimmte Javascript-Objekte, die es nur in bestimmten Browsern gibt, geschehen.

Hallvord M. Steens Artikel Using capability detection bei dev.opera aus dem Jahre 2006 zeigt einen Ansatz wie bessere Browsererkennung rein über die jeweiligen Javascript-Eigenschaften des Browsers bewerkstelligt wird.

Browsersniffing wird von manchen sogar als überholt angesehen, andere wiederum erfinden und entdecken neue Patches, um Browser zu erkennen. Dabei wird Browsersniffing schon in 2002 als übel und dumm angesehen, das Problem ist also schon älter.

Da ist in Bezug auf Browsererkennung einiges an Fortbildung bei manchen Webmastern nötig.

Es ist zu hoffen, dass Webmaster und -entwickler ihre Skripte überarbeiten und Opera 10 nicht mehr aussperren werden, denn spätestens bei Opera 10 Final wird das nötig sein. Und Browser wie der Internet Explorer sind ja auch nur noch zwei Ziffern von der 10 entfernt.

Autor: GwenDragon · Kategorie Opera · Permalink · Kommentare (0) · Kommentar schreiben

Kommentar für Blogeintrag

Vorschau des Kommentars

Kommentar

Mit * gekennzeichnete Felder müssen angegeben werden.



(Textformatierung in Markdown möglich)

Hinweis zum Datenschutz

Falls es Probleme mit Kommentaren/Trackbacks gibt, bitte ich um eine Beschreibung per E-Mail.

TrackBack-URL: http://gwendragon.de/blog/Web/Browser/Opera/opera-10-neue-browserkennung.html/trackback

↑Artikel