Lors de la diffusion de fichiers JavaScript, est-il préférable d'utiliser l'application / javascript ou application / x-javascript

95

Toute la question rentre dans le titre. Et pour ajouter un peu de contexte: je ne demande pas ce qui est le meilleur selon ce que disent les spécifications, mais plutôt ce qui fonctionne le mieux compte tenu de la combinaison de navigateurs déployés de nos jours.

Quelques points de données:

  • Google utilise text/javascriptpour le JS utilisé sur sa page d'accueil.
  • Google utilise text/javascriptsur Google Docs.
  • Google utilise application/x-javascriptpour servir les fichiers JavaScript avec son service de bibliothèques Ajax .
  • Yahoo utilise application/x-javascriptpour servir leur JS.
  • Yahoo utilise application/x-javascriptpour le JavaScript servi sur sa page d'accueil.
avernet
la source
4
Drôle. Vous donnez une troisième alternative dans vos exemples ... Et selon Tim, les deux grands joueurs se trompent (en ce qui concerne les standards), ce qui signifie probablement que les navigateurs sont tolérants (pas de grande nouvelle ici) et cela n'a pas d'importance.
PhiLho
1
possible dupe: Javascript MIME Type
Bergi

Réponses:

115
  • text/javascript est obsolète
  • application/x-javascript était expérimental lors de la décision de passer à…
  • application/javascript est le type MIME officiel actuel pour JS

Cela dit, les navigateurs ignorent souvent l' content-typeenvoi par le serveur et accordent beaucoup d'attention à l' typeattribut (et certains peuvent ne pas encore reconnaîtreapplication/javascript ).

Ma recommandation:

  • Utiliser application / javascript sur le serveur
  • Utilisez HTML 5 et omettez l' typeattribut des éléments de script

NB: la spécification HTML est en contradiction avec la norme MIME, et il y a un effort pour la changer pour text/javascriptque cela puisse changer à l'avenir.

Quentin
la source
3
Cette question d'il y a quelques mois dit exactement le contraire. Quelqu'un se trompe :) "Kelly a raison, les navigateurs ont tendance à faire confiance au type MIME envoyé avec les en-têtes de réponse sur l'attribut type de la balise de script" stackoverflow.com/questions/189850/…
Marco
6
Oh non! Les grandes organisations monolithiques et lentes doivent avoir raison! La spécification doit être fausse! Narghh. Je continuerai à faire confiance aux spécifications et à ma propre expérience sur les grandes entreprises (lentes), même si l'une d'entre elles m'employait auparavant.
Quentin
1
Hmm, quelqu'un a oublié de dire au W3C que le texte / javascript est obsolète. Cela semble être la valeur par défaut dans HTML 5 . :: scratches head :: Il semble également (si ma lecture superficielle de cette section est correcte) que les agents utilisateurs sont censés aller uniquement sur l' typeattribut, ignorant ainsi le Content-typecomportement correct.
big_m
1
@big_m - C'est parce que beaucoup de navigateurs ne reconnaissent pas, application/javascriptdonc le fait de spécifier cela les amènera à ignorer le script. Les agents utilisateurs ne sont pas censés ignorer le Content-Type. L'attribut type leur dit à quoi s'attendre. S'ils ne l'appuient pas, ils ne devraient pas prendre la peine de le demander. Si le serveur dit alors que c'est quelque chose de différent, il devrait continuer sur ce point plutôt que sur ce que dit le HTML (au moins selon HTTP, vous pourriez regarder une spécification différente, vous n'avez fourni aucun lien).
Quentin
1
@Quentin, je faisais référence à la section HTML 5 sur l' scriptélément, à laquelle j'ai lié. Ma lecture de cette section est différente de ce que vous décrivez; il semble accorder beaucoup d'importance à l' typeattribut et ne fait aucune mention de la vérification du Content-Type, sauf pour déterminer le codage des caractères. Je suis d'accord qu'il semble qu'il serait sage pour l'agent utilisateur de vérifier que le Content-Type correspond à ce qui est attendu, mais je n'ai rien trouvé dans la spécification HTML qui exige ou même recommande de le faire.
big_m
12

Dans la plupart des situations, le type mime envoyé par le serveur ne fait aucune différence pratique. J'irais avec application / javascript , qui est également recommandé par un RFC.

Matthew Flaschen
la source
7

Si vous choisissez d'utiliser application / javascript pour js dans vos pages, IE7 et IE8 n'exécuteront pas votre script! Blâmez Microsoft autant que vous voulez, mais si vous voulez que la plupart des gens exécutent vos pages, utilisez du texte / javascript.

Drew B
la source
3
Quand vous dites que "application / javascript" ne fonctionnera pas, voulez-vous dire si cela est défini comme type de contenu sur la réponse HTTP ou comme attribut "type" d'une balise de script? La question d'origine portait sur le type de contenu des réponses HTTP. Sur la base d'autres réponses, il semble que seule la valeur de l'attribut "type" sur les balises de script fera une différence dans les deux sens dans IE.
Jesse Hallett le
7

C'était le cas language="javacript". Ensuite, il est devenu type="text/javascript". Maintenant ça l'est type="application/javacript". Ok, ça devient stupide. Certains des navigateurs plus anciens ne reconnaissent pas le nouveau application/javascript, mais reconnaissent toujours l'ancien text/javascript. Je prévois de continuer à utiliser ceci, sinon je perdrai des heures de mon temps à essayer de changer CHAQUE instance de text/javascripten application/javascript.
Maintenant, un jour, le contraire pourrait être vrai. Un jour, les navigateurs les plus récents pourraient rejeter l'ancienne technique afin d'être strictement conformes aux normes.
Mais jusqu'à ce que les gens qui consultent mon site Web commencent à se plaindre que "depuis la mise à jour de mon navigateur, environ 50% de votre site Web a disparu", je n'ai aucune raison de changer le code de mon site Web.

Sandip Armal Patil
la source
7

Voici la réponse 2020 à cette question.

text/javascriptest le type MIME JavaScript correct selon la norme HTML , qui stipule:

Les serveurs doivent utiliser text/javascriptpour les ressources JavaScript. Les serveurs ne doivent pas utiliser d'autres types MIME JavaScript pour les ressources JavaScript et ne doivent pas utiliser de types MIME non JavaScript.

Et aussi :

[…] Le type MIME utilisé pour faire référence à JavaScript dans cette spécification est text/javascript, puisque c'est le type le plus couramment utilisé, bien qu'il soit un type officiellement obsolète selon la RFC 4329.

Des travaux sont en cours pour refléter cette réalité dans une RFC au niveau de l'IETF: https://datatracker.ietf.org/doc/draft-ietf-dispatch-javascript-mjs/

Toute affirmation selon laquelle " text/javascriptest obsolète" le dit sur la base de la RFC 4329, que la norme HTML et le projet IETF susmentionné (c'est-à-dire une RFC à venir) corrigent explicitement.

Mathias Bynens
la source
4

C'était "text / javascript" mais c'est obsolète (voir la liste IANA ) et maintenant ça devrait être "application / javascript" (voir une autre liste IANA ).

Tim Büthe
la source