Differenza tra tipi di contenuto application / x-javascript e text / javascript


245

Qual è la differenza tra queste intestazioni?

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

Qual è il migliore e perché?

Per favore, non dire che sono identici - se fossero identici non ce ne sarebbero stati tre. Conosco entrambi i lavori, ma vorrei sapere la differenza.


1
La differenza è anche un motivo classico per cui i tuoi script non vengono compressi. Assicurati di avere una voce in httpCompression per il tipo effettivo che stai servendo e nota che IIS Express comprime solo application / x-javascript e text / * per impostazione predefinita.
rism

NB: un elenco completo di "tipi mime javascript" è disponibile qui: html.spec.whatwg.org/multipage/… . vale a dire questo è l'elenco di valori che un browser dovrebbe consentire per scriptl' typeattributo di un tag quando nosniffviene specificata la direttiva. developer.mozilla.org/en-US/docs/Web/HTTP/Headers/…
JohnLBevan

Risposte:


320

text/javascriptè obsoleto ed è application/x-javascriptstato sperimentale (da cui il x-prefisso) per un periodo di transizione fino a quando application/javascriptnon è stato possibile standardizzare.

Si dovrebbe usare application/javascript. Questo è documentato nella RFC .

Per quanto riguarda i browser, non vi è alcuna differenza (almeno nelle intestazioni HTTP). Questa è stata solo una modifica in modo che i gruppi di tipi text/*e application/*MIME abbiano avuto un significato coerente ove possibile. (I text/*tipi MIME sono destinati a contenuti leggibili dall'uomo, JavaScript non è progettato per trasmettere direttamente significato agli umani).

Si noti che l'utilizzo application/javascriptin typeattributo di un elemento script causare lo script per essere ignorato (come in una lingua sconosciuta) in alcuni browser meno recenti. Continuare a utilizzarlo text/javascripto omettere completamente l'attributo (che è consentito in HTML 5).

Questo non è un problema nelle intestazioni HTTP poiché i browser universalmente (per quanto ne so) ignorano del tutto il tipo di contenuto HTTP degli script o sono abbastanza moderni da riconoscere application/javascript.


grazie mille per la risposta dettagliata. un altro problema - hai detto che posso ometterlo del tutto (solo HTML5?) - ma la mia domanda (che è stata successivamente modificata da qualcuno) era specificamente su JS in PHP - funzionerà come combo PHP / JS su tutti i server / browser se lo ometterò del tutto ??
Obmerk Kronen,

8
È possibile omettere l' type attributo su un <script>elemento. Non puoi omettere l' Content-Typeintestazione HTTP ... mai (se non la specifichi in PHP, allora PHP sarà di default su text/htmlquale è molto sbagliato).
Quentin,

2
Seguendo la logica leggibile dall'uomo, il CSS non dovrebbe essere classificato anche come applicazione anziché come testo?
Fabrício Matté,

2
@frnhr la tua modifica a questa risposta ha cambiato il significato previsto (che era dichiarare text/javascriptobsoleto ed application/x-javascriptera sperimentale). Peggio ancora, ha lasciato l'inizio della risposta incoerente, con un blocco che dice text/javascriptsemplicemente di uscire in modo irrilevante in cima alla risposta senza una ragione ovvia.
Mark Amery,

1
In SVN, usa sicuramente text / javascript. SVN tratta tutto ciò che NON inizia con text / come binario. Per correggere l'intera copia di lavoro SVN, è necessario creare un file mime.cmd contenente quanto segue: @echo off for /r . %%X in (*.js) do ( svn propset svn:mime-type text/javascript "%%X" ) che una volta eseguito, cambierà il tipo mime di tutti i file JS nel repository in text / javascript. È quindi necessario eseguire il commit dei file JS in SVN con il nuovo tipo MIME.
Mark Eldridge,

21

i tipi mime che iniziano con x-non sono standardizzati. Nel caso di JavaScript è un po 'obsoleto. Aggiunta del secondo frammento di codice

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

richiede short_open_tagsdi essere abilitato. dovresti evitarlo.

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

Tuttavia, il tipo mime completamente corretto per javascript è

application/javascript

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


1
Vecchia risposta, ma non so se va bene iniziare con tag aperti brevi fino a quando non è una buona pratica (ti consigliamo vivamente di disabilitare PHP-SOT in effetti)
Ben Cassinat,

8

Secondo RFC 4329 dovrebbe essere il tipo MIME corretto per JavaScript application/javascript. Tuttavia, le versioni precedenti di IE soffocano da questo perché si aspettano text/javascript.


7
Per quanto ne so, IE non fornisce a una scimmia ciò che dice il tipo di contenuto HTTP; solo ciò che typedice l'attributo HTML (e nelle bozze HTML 5 tale attributo può essere omesso per JavaScript).
Quentin,

@Quentin ahh ... ecco cosa mi stava dando problemi. Grazie!
martin

3

Usa type = "application / javascript"

Nel caso di HTML5, l'attributo type è obsoleto, è possibile rimuoverlo. Nota: l'impostazione predefinita è "text / javascript" secondo w3.org, quindi suggerirei di aggiungere "application / javascript" invece di rimuoverlo.

http://www.w3.org/TR/html5/scripting-1.html#attr-script-type
L'attributo type fornisce la lingua dello script o il formato dei dati. Se l'attributo è presente, il suo valore deve essere un tipo MIME valido. Il parametro charset non deve essere specificato. L'impostazione predefinita, che viene utilizzata se l'attributo è assente, è "text / javascript".

Usa "application / javascript", perché "text / javascript" è obsoleto :

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

  1. Tipi di supporti di scripting distribuiti e compatibilità

    Vari tipi di supporti non registrati sono stati utilizzati in modo ad hoc per etichettare e scambiare programmi scritti in ECMAScript e JavaScript. Questi includono:

    + ------------------------------------------------- ---- + | testo / javascript | testo / ecmascript | | text / javascript1.0 | text / javascript1.1 | | text / javascript1.2 | text / javascript1.3 | | text / javascript1.4 | text / javascript1.5 | | testo / jscript | testo / livescript | | text / x-javascript | text / x-ecmascript | | application / x-javascript | application / x-ecmascript | | application / javascript | application / ecmascript | + ------------------------------------------------- ---- +

L'uso del tipo di "testo" di livello superiore per questo tipo di contenuto è noto per essere problematico. Questo documento definisce quindi text / javascript e text /
ecmascript ma li contrassegna come "obsoleti". L'uso di
tipi di media sperimentali e non registrati, come elencato nella parte sopra, è sconsigliato.
I tipi di media,

  * application/javascript
  * application/ecmascript

che sono anche definiti in questo documento, sono intesi per uso comune e dovrebbero essere usati al loro posto.

Questo documento definisce requisiti di elaborazione equivalenti per i
tipi text / javascript, text / ecmascript e application / javascript.
L'uso e il supporto per l'applicazione del tipo di supporto / ecmascript è
notevolmente meno diffuso rispetto ad altri tipi di supporto definiti in
questo documento. Usandolo a suo vantaggio, questo documento definisce
regole di elaborazione più rigorose per questo tipo per favorire l'
elaborazione più interoperabile .

x-javascript è sperimentale, non usarlo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.