StartWeblogÜbersichtBlog-Eintrag
Der Internet Explorer und Web-Standards Weblog Publikationen und RPMs

Blog-Eintrag

Scripting Media Types

Die Scriptsprache JavaScript hat sich seit langen Jahren fest etabliert, wenn es um die Realisierung vor allem von interaktiven Web-Auftritten geht.
Erfinder der Scriptsprache JavaScript war die Browser-Firma Netscape Communications. Die Kernkomponenten dieser Scriptsprache sind wegen des hohen Interesses an dieser Technologie bald nach Veröffentlichung schon vor Jahren bei der ECMA und bei der ISO als Industriestandard ECMAScript festgelegt worden. Aktuell ist die Version ECMAScript 262, Revision 3.

ECMAScript bildet sowohl die Grundlage für z.B. aktuelle JavaScript-Weiterentwicklungen, welche vor allem in Webtechnologien von Mozilla-basierten Produkten eingesetzt werden, als auch die Grundlage für Microsofts Variante JScript. Beide Varianten, JavaScript wie auch JScript sind mit ECMAScript also weitgehend identisch. Aber auch z.B. ActionScript, Macromedias Script-Sprache für Flash-Applikationen, ist ECMAScript-basiert. ECMAScript bietet für alle diese Sprachen also den kleinsten gemeinsamen Nenner. Bei genauerem Hinsehen lässt sich erkennen, dass die meisten aller im öffentlichen Web zu findenen JavaScript-Anwendungen eigentlich reines ECMAScript sind.

Trotz ihrer Verbreitung haben alle diese genannten Scriptsprachen bis heute keine offizielle und damit normativ gültige MIME-Typisierung (Erklärendes zu MIME-Typen z.B. unter SELFHTML: MIME-Typen) erfahren. In jüngester Zeit gibt es hoffnungsvolle Anzeichen, dass diese Lücke bald geschlossen wird.

MIME-Typen kategorisieren elektronisch (Medien)-Inhalte bzw. ordnen ihnen Datei-Extensionen und/oder Anwendungen zu. Diese Kategorisierung und Standardisierung erleichtert den ungehinderten, plattformunabhängigen Austausch elektronischer Informationen. Oberste Koordinierungsstelle für MIME-Typen sind die IANA und die IETF (Internet Engineering Task Force). Letztere verwaltet u.a. die RFCs (Requests for Comments), durch welche auch MIME-Typen offiziell näher beschrieben bzw. spezifiziert sind. Das Verzeichnis der Media-Typen listet alle bisher registrierten Medientypen auf.

Verblüffenderweise ist der ehemals von Netscape für JavaScript eingeführte und weltweit bisher über Jahre verwendete MIME-Typ text/javascript bei der IANA bzw. der IETF formell nirgends registriert bzw. näher spezifiziert. Auch keine andere Firma oder ein anderes Gremium hat bisher sichtbare Anstrengungen unternommen, um diese Lücke zu schließen. Dies ist insbesondere vor dem Hintergrund sehr merkwürdig, dass sich mit dieser Technologie bisher verschiedene wichtige Firmen und Gremien intensiv auseinandergesetzt haben, angefangen bei dem Erfinder dieser Scriptsprache Netscape, weiter über die ECMA, welche diese Technologie als ECMAScript standardisiert hat, über die Firma Microsoft, welche ECMAScript als Basis für seine Version JScript aufgegriffen hat bis hin zum W3C (World Wide Web Consortium), welches in verschiedenen normativen Dokumenten selbstverständlichen Bezug auf JavaScript nimmt. Alle diese am Entwicklungsprozess von JavaScript mittelbar oder unmittelbar Beteiligten haben es bisher (aus welchen Gründen auch immer) vermissen lassen, für diese Scriptsprache bzw. seine Abkömmlinge bei der IETF ganz offiziell auch eine normative MIME-Typisierung zu beantragen bzw. durchzusetzen.

Aus historischen Gründen und wohl auch nicht zuletzt aufgrund dieser ungeklärten Situation haben sich bei Entwicklern wie Software-Herstellern mit der Zeit verschiedene MIME-Zuordnungen für JavaScript etabliert. Die Zuordnungen text/javascript oder auch application/x-javascript dürften die am weitesten verbreiteten Schreibweisen sein, wobei erstere von so gut wie jedem Web-Browser verstanden wird (weil Netscape diesen Typ ursprüngl. wohl eingeführt hat) und letztere zwar vor allem von Mozilla-basierten Web-Browsern und Apache-Webservern nicht aber vom weitverbreiteten Internet Explorer von Microsoft. Normativ definiert und für jeden verbindlich erklärt sind beide Typisierungen also nicht. Siehe hierzu auch die zugehörige Diskussion des entsprechenden Mozilla-Bugs 62485.
Bei der Typisierung von JavaScript mittels text/javascript durch die Firma Netscape spielte wahrscheinlich die Auffassung eine Rolle, bei JavaScript-Code handele es sich um Text, was es in weitestem Sinne ja auch ist. In engerem Sinne ist es jedoch ausführbarer Programmcode und damit sinnigerweise eher einem Programm, einer Applikation zuzuordnen, weshalb der MIME-Typ text/javascript von vielen als ungeeignete Typisierung angesehen wird. Es ist eigentümlich, warum es Netscape damals zwar geschafft hat, JavaScript bei der ECMA zu standardisieren, es jedoch offenbar versäumt hat, bei der IETF eine diesbezügliche normative Typisierung voranzubringen.

Diese bisherige Unklarheit stiftet auf Dauer Verwirrungen über den richtigen Austausch von Informationen, wenn JavaScript im Spiel ist. Ist JavaScript-Code nun als Text zu behandeln? Oder als Applikation? Gerade in der Kommunikation zwischen Web-Server und Web-Browser ist das eine wichtige Frage, und heutige Web-Browser sind sich da nicht unbedingt einig.

Schon 2001 ist deshalb mittels einer Privat-Initiative von Björn Höhrmann versucht worden, der Klarheit endlich zum Durchbruch zu verhelfen und der IETF einen Entwurf zur Festlegung von einem oder mehreren geeigneten MIME-Typen für ECMAScript-basierte Sprachen vorzulegen. Leider ist dieser Vorstoß aus mir unbekannten Gründen versandet und blieb weitgehend ohne Reaktion seitens der IETF. Im Februar 2005 ist von derselben Person zum selben Thema ein erneuter Vorschlag als Diskussions- und anschließender Registrierungsvorlage eingereicht worden: Scripting Media Types.
Das Registrierungsverfahren ist derzeit noch nicht abgeschlossen, der bisherige Registrierungsverlauf weist jedoch in eine positive Richtung, wie das das Verlaufsprotokoll und die zugehörigen Erläuterungen der Stati erkennen lassen. Der eingereichte Vorschlag war Mitte April 2005 aktuell, voraussichtlich wird er im Verlauf des Diskussions- und Registrierungsverfahrens der IETF durch ein überarbeitetes Dokument ersetzt werden. Näheres dazu verrät das Verlaufsprotokoll. Passiert dieser Vorschlag mit Erfolg alle notwenigen Diskussions und Abstimmunsprozesse der IETF, so ist dieser Vorschlag am Ende ein normativer und mit einer Referenznummer versehener RFC. Den kritischen Status des Last Call hat der eingereichte Vorschlag jedenfalls bisher erfolgreich überstanden, was bedeutet, dass der Vorschlag grundsätzlich seine Berechtigung hat. In einem mehrwöchig andauernden Diskussionprozess werden nun Feinheiten an diesem Vorschlag diskutiert und evtl. die eine oder andere Formulierung verbessert.

Aufgrund dieses Vorschlags stehen folgende zukünftig gültige MIME-Typen zur Diskussion und Absegnung:

  • text/javascript
  • text/ecmascript
  • application/javascript
  • application/ecmascript

Diese Auswahl greift MIME-Typisierungen auf, welche schon in Gebrauch sind, und sie empfiehlt auch neue, zukünfige Typen. Den Kommentaren auf der entsprechenden IETF Diskussionsliste ist zu entnehmen, dass die Formulierungen des derzeit vorliegenden Vorschlags zuviel Interpretationsspielraum zuließen und dass hier restriktivere Vorgaben gemacht werden müssten.

Die beiden letzteren Typen, welche sich auch ECMAScript beziehen, werden zur allgemeinen Nutzung anempfohlen. Sie ordnen die Scriptsprachen nicht als Untergruppe der Gruppe "Text" zu, sondern als Untergruppe der Gruppe "application". Diese Sichtweise wird auch von vielen Mozilla-Entwicklern geteilt.
Es wäre in der Folge wünschenswert und durchaus beabsichtigt, wenn sich diese Einsicht breit etablieren würde. Die bisherig etablierten bzw. vorzufindenen Schreibweisen text/javascript und application/x-javascript wären damit obsolet.

Es ist zu hoffen, dass der Registrierungsprozess diesmal erfolgreich verläuft und Software-Hersteller diese Vorgaben dann möglichst bald umsetzen. Bei Apache, Mozilla und Opera habe ich bzgl. einer zügigen Umsetzung wenig Bedenken, bei Microsoft und seinem Internet Explorer schon eher. Speziell in reinen Mozilla-Anwendungen findet man derzeit häufig die Typisierung von JavaScript mittels der zulässigen Eigenkreation application/x-javascript, welche glücklicherweise sowohl vom Apache-Webserver als auch Operas Web-Browser verstanden werden. Microsofts weitverbreiteter Internet Explorer kennt diesen MIME-Typ nicht, d.h., damit typisierte JavaScript-Anwendungen funktionieren hier nicht, weil sie gar nicht erst erkannt werden. Äquivalent dazu gilt das Gleiche für die Typisierung text/ecmascript, welche zwar vom Internet Explorer verstanden wird, nicht jedoch von Mozilla-Produkten.

Für Entwickler heißt das: Im Moment ist es wohl ratsam, JavaScript-Code weiterhin erstmal mit der noch verbreitenen Typisierung text/javascript zu kennzeichnen, wenn plattformübergreifender JavaScript/ECMAScript-Code verwendet wird.
Für die Zukunft wird sich diese Praxis hoffentlich dahingehend ändern, dass JavaScript-Code, also ECMAScript mit JavaScript-spezifischen Erweiterungen z.B. als application/javascript gekennzeichnet wird. Dies dürfte wohl eher in geschlossenen Mozilla-Anwendungen zum Tragen kommen. Reines ECMAScript, welches im Normalfall für öffentlich zugängliche und plattformneutrale Webanwendungen ausreicht, sollte dagegen auch als solches benannt und mit application/ecmascript typisiert werden. Die vorgeschlagene Datei-Extension für externe Skripte lautet .es, um sich auch hier von der bisher gebräuchlichen Kennzeichnung .js für extern referenzierten JavaScript-Code abzusetzen. Voraussetzung hierzu ist sicherlich, dass sowohl
Web-Server als auch Web-Browser damit umgehen können.

Für Interessierte an diesem Standardisierungsprozess dürften die nächsten Wochen spannend und interessant werden.

20:52 UTC+01:00

Anfang