163 votes

Quand utiliser le type MIME JavaScript application/javascript au lieu de text/javascript ?

Sur la base de la question Le code jQuery ne fonctionne pas dans IE , text/javascript est utilisé dans les documents HTML pour qu'Internet Explorer puisse le comprendre.

Mais je me demande à quel moment vous utiliseriez application/javascript et, plus important encore, pourquoi l'utiliser au lieu de text/javascript ?

0 votes

Doublon/explication possible : stackoverflow.com/questions/876561/

0 votes

0 votes

250voto

bobince Points 270740

En théorie, selon RFC 4329 , application/javascript .

La raison pour laquelle il est censé être application n'a rien à voir avec le fait que le type soit lisible ou exécutable. C'est parce qu'il existe des mécanismes personnalisés de détermination du jeu de caractères établis par le langage/type lui-même, plutôt que par le mécanisme générique de l charset paramètre. Un sous-type de text doit pouvoir être transcodé par un proxy vers un autre charset, en modifiant le paramètre charset. Ce n'est pas le cas de JavaScript car :

a. le RFC dit que les agents utilisateurs devraient faire du BOM-sniffing sur le script pour déterminer le type (je ne suis pas sûr que les navigateurs le fassent réellement) ;

b. les navigateurs utilisent d'autres informations - y compris l'encodage de la page et l'in certains navigateurs le script charset pour déterminer le jeu de caractères. Ainsi, tout proxy qui tenterait de transcoder la ressource mettrait ses utilisateurs hors d'état de nuire. (Bien sûr, en réalité, personne n'utilise jamais de proxy de transcodage, mais c'était l'intention).

Les octets exacts du fichier doivent donc être conservés exactement , ce qui en fait un système binaire application et non techniquement basé sur des caractères text .

Pour la même raison, application/xml est officiellement préféré à text/xml : XML dispose de ses propres mécanismes de signalisation de jeu de caractères en bande. Et tout le monde ignore application pour XML également.

text/javascript y text/xml ne sont peut-être pas la bonne solution officielle, mais ils sont ce que tout le monde utilise aujourd'hui pour des raisons de compatibilité, et les raisons pour lesquelles ils ne sont pas la bonne solution sont pratiquement sans importance.

4 votes

La solution la plus "compatible" consiste à n'inclure aucun type de contenu dans la réponse. Le RFC indique que sans un type de contenu explicite, le destinataire interpréterait la réponse comme suit "par contexte" ce qui est toujours le comportement correct pour tous les navigateurs depuis les tout premiers navigateurs

0 votes

Soyez prudent avec application/javascript et IE fonctionnant en mode de compatibilité avec IE=8 . Il semble que les scripts inline ne soient pas correctement évalués. text/javascript fonctionne bien.

2 votes

@Pacerier - Je sais que ce commentaire date d'il y a 5 ans, mais aujourd'hui il est souvent préférable d'inclure les types mime, en particulier pour les sites web de type forum, pour des raisons de sécurité. Le fait que le destinataire interprète le type ouvre la porte à une attaque par téléchargement d'un fichier javascript malveillant sous forme d'image, puis par interprétation et exécution de ce script par le navigateur. Il est préférable que le serveur renvoie des types mime pour toutes les réponses et utilise l'en-tête X-Content-Type-Options: nosniff pour empêcher le navigateur d'interpréter le type.

18voto

Harmen Points 11632

Le problème avec le type MIME de Javascript est qu'il n'y a pas de norme depuis des années. Aujourd'hui, nous avons application/javascript comme type MIME officiel.

Mais en fait, le type MIME n'a aucune importance, car le navigateur peut le déterminer lui-même. C'est pourquoi les spécifications de HTML5 stipulent que le type type="text/javascript" n'est plus nécessaire.

6voto

thejh Points 20901

application parce que .js -Les fichiers ne sont pas quelque chose que l'utilisateur veut lire, mais quelque chose qui doit être exécuté.

0 votes

C'est la réponse officielle, mais IE l'ignore.

20 votes

@Benn : Peut-être parce que les utilisateurs d'IE doivent lire tous les fichiers JS parce qu'ils ne s'exécutent pas correctement ? En tout cas, c'est honnête de la part de Microsoft ;)

0 votes

J'adore votre commentaire, mais malheureusement les gens qui ne peuvent pas lire le javascript utilisent toujours IE, donc nous devons faire avec :(.

3voto

Radu Points 3969

Application/javascript est le type correct à utiliser, mais comme il n'est pas pris en charge par IE6-8, vous devrez vous contenter de text/javascript. Si vous ne vous souciez pas de la validité (HTML5 exclu), ne spécifiez pas de type.

0 votes

Où l'avez-vous trouvé ? Je suis presque sûr qu'il est pris en charge. Ou, du moins, qu'il sera ignoré.

0 votes

@Zenexer lire sa réponse à une autre question . Apparemment, la compatibilité avec IE ne signifie pas application/javascript .

0 votes

@CamiloMartin Je l'utilise sans problème avec IE jusqu'à 6 tout le temps. Ils utilisent juste JavaScript par défaut.

3voto

Mathias Bynens Points 41065

Il y a eu beaucoup de confusion et de désaccord à ce sujet dans le passé, ce que d'autres réponses expliquent en détail.

RFC9239 résout enfin cette confusion en s'alignant sur la réalité de la mise en œuvre. application/javascript est désormais officiellement obsolète ; text/javascript est le seul type MIME JavaScript correct.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X