Quando utilizzare l'applicazione di tipo MIME JavaScript / javascript anziché text / javascript?


157

Basato sulla domanda il codice jQuery che non funziona in IE , text/javascriptviene utilizzato nei documenti HTML in modo che Internet Explorer possa capirlo.

Ma mi chiedo, quando useresti application/javascripte, cosa più importante, perché dovresti usarlo invece di text/javascript?


possibile dupe / spiegazione: stackoverflow.com/questions/876561/…
Benn



Risposte:


243

In teoria, in base alla RFC 4329 , application/javascript.

Il motivo per cui dovrebbe essere applicationnon ha nulla a che fare con il tipo leggibile o eseguibile. È perché ci sono meccanismi personalizzati di determinazione dei set di caratteri stabiliti dalla lingua / dal tipo stesso, piuttosto che solo dal charsetparametro generico . Un sottotipo di textdovrebbe essere in grado di essere transcodificato da un proxy in un altro set di caratteri, modificando il parametro charset. Questo non è vero per JavaScript perché:

un. la RFC dice che gli user-agent dovrebbero fare lo sniffer BOM sullo script per determinare il tipo (non sono sicuro che alcuni browser lo facciano);

b. i browser usano altre informazioni — la codifica della pagina inclusa e in alcuni browser l' script charsetattributo — per determinare il set di caratteri. Quindi qualsiasi proxy che tentasse di transcodificare la risorsa avrebbe violato i suoi utenti. (Naturalmente in realtà nessuno usa mai i proxy di transcodifica comunque, ma quello era l'intento.)

Pertanto, i byte esatti del file devono essere mantenuti esattamente , il che lo rende un applicationtipo binario e non tecnicamente basato sui caratteri text.

Per lo stesso motivo, application/xmlè ufficialmente preferito rispetto a text/xml: XML ha i suoi meccanismi di segnalazione dei set di caratteri in banda. E tutti ignorano anche applicationper XML.

text/javascripte text/xmlpotrebbe non essere la cosa giusta ufficiale, ma ci sono ciò che tutti usano oggi per motivi di compatibilità e i motivi per cui non sono la cosa giusta sono praticamente completamente irrilevanti.


4
La soluzione più "compatibile" è quella di non includere alcun tipo di contenuto nella risposta. RFC afferma che senza un tipo di contenuto esplicito, il destinatario lo interpreterebbe "per contesto", che è sempre il comportamento corretto per tutti i browser fin dai primi browser
Pacerier,

Fai attenzione application/javascripte IE funziona in modalità compatibilità con IE=8. Sembra che gli script incorporati non siano valutati correttamente. text/javascriptfunziona bene lì.
Joscha,

2
@Pacerier - So che questo commento ha 5 anni, ma oggi è spesso meglio includere i tipi MIME, in particolare per i siti Web di tipo forum, per motivi di sicurezza. Avere il ricevitore che interpreta il tipo lascia uno aperto all'attacco caricando un file javascript dannoso come immagine e quindi il browser interpreta ed esegue quello script. È meglio che il server restituisca i tipi mime per tutte le risposte e usi l'intestazione X-Content-Type-Options: nosniffper impedire al browser di interpretare il tipo.
sammy_winter

@sammy_winter Vedo avvertimenti come questi ovunque e rabbrividiscono ogni volta. Se permettessi agli utenti di caricare contenuti, probabilmente farei più convalida di "oh sì, nome regex abbinato per file png, posso fidarmi di quello", no? Se un'intestazione errata diventa un "problema di sicurezza", il problema è forse da qualche parte più profondo, non credi? Questo è lo stesso che per nascondere Server: nginxo qualunque cosa nginx mandi. Come se chiunque fosse in grado di trovare un buco ha bisogno di un'intestazione esplicita per sapere quale server si esegue ...
Sahsahae,

17

Il problema con il tipo MIME di Javascript è che non esiste uno standard da anni. Ora abbiamo application / javascript come tipo MIME ufficiale.

Ma in realtà, il tipo MIME non ha alcuna importanza, poiché il browser può determinare il tipo stesso. Ecco perché le specifiche HTML5 affermano che type="text/javascript"non è più necessario.


5

applicationperché i .jsfile non sono qualcosa che un utente vuole leggere ma qualcosa che dovrebbe essere eseguito.


Questa è la risposta ufficiale, ma IE la soffoca.
Benn,

20
@Benn: Forse perché gli utenti di IE devono leggere tutti i file JS perché non vengono eseguiti correttamente? Almeno, è onesto da Microsoft;)
thejh

Adoro il tuo commento, ma purtroppo le persone che non riescono a leggere javascript usano ancora IE, quindi dobbiamo occuparcene :(.
Mark Baijens,

1
Non penso che tu voglia leggere o no, ha qualcosa a che fare con il perché. Ha a che fare con il modo in cui i dati vengono transcodificati - o meglio, se possono essere.
Zenexer,

tecnicamente, HTML e CSS vengono anche "eseguiti" (analizzati) dal browser per produrre il risultato del codice come contenuto visivo e non è pensato per l'utente "leggerlo", quindi questa risposta non ha molto senso. Immagino che ci sia grande confusione su cosa sia "testo" e cosa sia "applicazione". Se potessi votare in questa materia, direi che l'IETF dovrebbe considerare i contenuti "testuali" come text, e binarycome application-Oppure lo "scopo" di detto tipo come in "immagine", o "documento", ecc.

1

application / javascript è il tipo corretto da usare ma poiché non è supportato da IE6-8 rimarrai bloccato con text / javascript. Se non ti interessa la validità (escluso HTML5), non specificare un tipo.


Dove l'hai preso? Sono abbastanza sicuro che sia supportato. O, almeno, verrà ignorato.
Zenexer,

@Zenexer ha letto la sua risposta a un'altra domanda . Apparentemente la compatibilità con IE significa no application/javascript.
Camilo Martin,

@CamiloMartin Lo uso bene con IE fino a 6 tutto il tempo. Per impostazione predefinita sono JavaScript.
Zenexer,

@Zenexer Hm, strano. Mi chiedo quale fosse il problema nelle altre domande e risposte.
Camilo Martin,

@Zenexer È passato un po 'di tempo da quando ho avuto a che fare con questo, ma qui ci sono altri account di questo che causano problemi con IE6-8. Non sono del tutto sicuro del motivo per cui questo sembra avere importanza solo alcune volte, ma nella mia esperienza ha causato problemi.
Radu,
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.