Unterschied zwischen den Inhaltstypen application / x-javascript und text / javascript

245

Was ist der Unterschied zwischen diesen Headern?

Content-Type: application/javascript
Content-Type: application/x-javascript
Content-Type: text/javascript

Welches ist das Beste und warum?

Bitte sagen Sie nicht, dass sie identisch sind - wenn sie identisch wären, wären es nicht drei gewesen. Ich kenne beide Arbeiten - aber ich würde gerne den Unterschied wissen.

Obmerk Kronen
quelle
1
Der Unterschied ist auch ein klassischer Grund, warum Ihre Skripte nicht komprimiert werden. Stellen Sie sicher, dass Sie in httpCompression einen Eintrag für den tatsächlichen Typ haben, den Sie bedienen, und beachten Sie, dass IIS Express standardmäßig nur application / x-javascript und text / * komprimiert.
Rism
NB: Eine vollständige Liste der "Javascript- MIME- Typen" finden Sie hier: html.spec.whatwg.org/multipage/… . Dies ist die Liste der Werte, die ein Browser für scriptdas typeAttribut eines Tags zulassen sollte, wenn die nosniffDirektive angegeben wird. developer.mozilla.org/en-US/docs/Web/HTTP/Headers/…
JohnLBevan

Antworten:

320

text/javascriptist veraltet und application/x-javascriptwar x-für eine Übergangszeit experimentell (daher das Präfix), bis application/javascriptes standardisiert werden konnte.

Sie sollten verwenden application/javascript. Dies ist im RFC dokumentiert .

In Bezug auf Browser gibt es keinen Unterschied (zumindest bei HTTP-Headern). Dies war nur eine Änderung, sodass die Gruppen text/*und application/*MIME-Typgruppen nach Möglichkeit eine einheitliche Bedeutung hatten. ( text/*MIME-Typen sind für von Menschen lesbare Inhalte gedacht. JavaScript wurde nicht entwickelt, um Menschen direkt Bedeutung zu vermitteln.)

Beachten Sie, dass die Verwendung application/javascriptdes typeAttributs eines Skriptelements dazu führt, dass das Skript in einigen älteren Browsern ignoriert wird (da es in einer unbekannten Sprache vorliegt). Verwenden Sie text/javascriptdort entweder weiter oder lassen Sie das Attribut vollständig weg (was in HTML 5 zulässig ist).

Dies ist in HTTP-Headern kein Problem, da Browser allgemein (soweit mir bekannt ist) entweder den HTTP-Inhaltstyp von Skripten vollständig ignorieren oder modern genug sind, um erkannt zu werden application/javascript.

QUentin
quelle
Vielen Dank für die ausführliche Antwort. Ein weiteres Problem - Sie haben gesagt, dass ich es ganz weglassen kann (nur HTML5?) - aber meine Frage (die später von jemandem bearbeitet wurde) betraf speziell JS in PHP - funktioniert es als PHP / JS-Kombination auf allen Servern / Browsern wenn ich es ganz weglassen werde ??
Obmerk Kronen
8
Sie können das type Attribut für ein <script>Element weglassen . Sie können den Content-TypeHTTP-Header niemals weglassen (wenn Sie ihn nicht in PHP angeben, wird PHP standardmäßig verwendet, text/htmlwas sehr falsch ist).
Quentin
2
Sollte CSS nach der für Menschen lesbaren Logik nicht auch als Anwendung anstelle von Text klassifiziert werden?
Fabrício Matté
2
@frnhr Ihre Bearbeitung dieser Antwort hat die beabsichtigte Bedeutung geändert (die besagt, dass sie text/javascriptveraltet und application/x-javascriptexperimentell ist). Schlimmer noch, der Anfang der Antwort blieb inkohärent, und ein Block mit der Aufschrift " text/javascriptIrrlicht" hängt ohne ersichtlichen Grund irrelevant oben in der Antwort.
Mark Amery
1
Verwenden Sie in SVN definitiv Text / Javascript. SVN behandelt alles, was NICHT mit text / beginnt, als binär. Um Ihre gesamte SVN-Arbeitskopie zu reparieren, müssen Sie eine mime.cmd-Datei erstellen, die Folgendes enthält: @echo off for /r . %%X in (*.js) do ( svn propset svn:mime-type text/javascript "%%X" ) Bei Ausführung wird der MIME-Typ aller JS-Dateien in Ihrem Repository in Text / Javascript geändert. Anschließend müssen Sie die JS-Dateien mit dem neuen MIME-Typ an SVN übergeben.
Mark Eldridge
21

MIME-Typen, die mit beginnen, x-sind nicht standardisiert. Im Falle von Javascript ist es irgendwie veraltet. Zusätzlich das zweite Code-Snippet

<?Header('Content-Type: text/javascript');?>

muss short_open_tagsaktiviert sein. du solltest es vermeiden.

<?php Header('Content-Type: text/javascript');?>

Der völlig korrekte MIME-Typ für Javascript ist jedoch

application/javascript

http://www.iana.org/assignments/media-types/application/index.html

KingCrunch
quelle
1
Alte Antwort, aber ich weiß nicht, ob das gut ist, um mit kurzen offenen Tags zu beginnen, bis dies keine bewährte Methode ist (wir empfehlen Ihnen dringend, PHP-SOT tatsächlich zu deaktivieren)
Ben Cassinat,
8

Gemäß RFC 4329 sollte der richtige MIME-Typ für JavaScript sein application/javascript. Ältere IE-Versionen verschlucken sich jedoch daran, da sie dies erwarten text/javascript.

Björn
quelle
7
Soweit mir bekannt ist, gibt der IE einem Affen nicht an, was der HTTP-Inhaltstyp sagt. Nur was das HTML- typeAttribut sagt (und in den HTML 5-Entwürfen kann dieses Attribut für JavaScript weggelassen werden).
Quentin
@ Quentin ahh ... das hat mir Ärger gemacht. Vielen Dank!
Martin
3

Verwenden Sie type = "application / javascript"

Im Fall von HTML5 ist das Typattribut veraltet. Sie können es entfernen. Hinweis: Laut w3.org wird standardmäßig "text / javascript" verwendet. Daher würde ich vorschlagen, "application / javascript" hinzuzufügen, anstatt es zu entfernen.

http://www.w3.org/TR/html5/scripting-1.html#attr-script-type
Das type-Attribut gibt die Sprache des Skripts oder das Format der Daten an. Wenn das Attribut vorhanden ist, muss sein Wert ein gültiger MIME-Typ sein. Der Zeichensatzparameter darf nicht angegeben werden. Die Standardeinstellung, die verwendet wird, wenn das Attribut fehlt, ist "Text / Javascript".

Verwenden Sie "application / javascript", da "text / javascript" veraltet ist :

RFC 4329: http://www.rfc-editor.org/rfc/rfc4329.txt

  1. Bereitgestellte Skriptmedientypen und Kompatibilität

    Verschiedene nicht registrierte Medientypen wurden ad-hoc verwendet, um in ECMAScript und JavaScript geschriebene Programme zu kennzeichnen und auszutauschen. Diese beinhalten:

    + --------------------------------------------- ---- + | Text / Javascript | Text / Ecmascript | | text / javascript1.0 | text / javascript1.1 | | text / javascript1.2 | text / javascript1.3 | | text / javascript1.4 | text / javascript1.5 | | text / jscript | Text / Livescript | | text / x-javascript | text / x-ecmascript | | Anwendung / x-Javascript | application / x-ecmascript | | Anwendung / Javascript | Anwendung / Ecmascript | + --------------------------------------------- ---- +

Die Verwendung des Top-Level-Typs "Text" für diese Art von Inhalten ist bekanntermaßen problematisch. Dieses Dokument definiert somit Text / Javascript und Text /
Ecmascript, markiert sie jedoch als "veraltet". Von der Verwendung von experimentellen und
nicht registrierten Medientypen, wie oben aufgeführt, wird abgeraten.
Die Medientypen,

  * application/javascript
  * application/ecmascript

die ebenfalls in diesem Dokument definiert sind, sind für den allgemeinen Gebrauch bestimmt und sollten stattdessen verwendet werden.

Dieses Dokument definiert äquivalente Verarbeitungsanforderungen für die
Typen Text / Javascript, Text / Ecmascript und Anwendung / Javascript.
Die Verwendung und Unterstützung der Medientypanwendung / des Ecmascript ist
erheblich weniger verbreitet als bei anderen in
diesem Dokument definierten Medientypen . In diesem Dokument werden
strengere Verarbeitungsregeln für diesen Typ definiert, um eine interoperablere
Verarbeitung zu fördern .

x-javascript ist experimentell, benutze es nicht.

juFo
quelle