Diferencia entre los tipos de contenido de aplicación / x-javascript y texto / javascript


245

¿Cuál es la diferencia entre estos encabezados?

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

¿Cuál es mejor y por qué?

Por favor, no digas que son idénticos: si fueran idénticos, no habría habido tres. Sé que ambos funcionan, pero me gustaría saber la diferencia.


1
La diferencia también es una razón clásica por la cual sus scripts no se comprimen. Asegúrese de tener una entrada en httpCompression para el tipo real que está sirviendo y tenga en cuenta que IIS Express solo comprime application / x-javascript y text / * de forma predeterminada.
rism

NB: Puede encontrar una lista completa de los "tipos mime de javascript" aquí: html.spec.whatwg.org/multipage/… . es decir, esta es la lista de valores que un navegador debe permitir para scriptel typeatributo de una etiqueta cuando nosniffse especifica la directiva. developer.mozilla.org/en-US/docs/Web/HTTP/Headers/…
JohnLBevan

Respuestas:


320

text/javascriptes obsoleto y application/x-javascriptfue experimental (de ahí el x-prefijo) durante un período de transición hasta que se application/javascriptpudo estandarizar.

Debe utilizar application/javascript. Esto está documentado en el RFC .

En lo que respecta a los navegadores, no hay diferencia (al menos en los encabezados HTTP). Esto fue solo un cambio para que los grupos de tipos text/*y application/*MIME tuvieran un significado coherente siempre que fuera posible. (Los text/*tipos MIME están destinados a contenido legible por humanos, JavaScript no está diseñado para transmitir directamente el significado a los humanos).

Tenga application/javascripten cuenta que el uso en el typeatributo de un elemento de secuencia de comandos hará que la secuencia de comandos se ignore (ya que se encuentra en un idioma desconocido) en algunos navegadores más antiguos. Continúe usándolo text/javascriptallí u omita el atributo por completo (lo cual está permitido en HTML 5).

Esto no es un problema en los encabezados HTTP ya que los navegadores de manera universal (hasta donde yo sé) ignoran por completo el tipo de contenido HTTP de los scripts o son lo suficientemente modernos como para reconocerlos application/javascript.


Muchas gracias por la respuesta detallada. un problema más: has dicho que puedo omitirlo por completo (¿solo HTML5?), pero mi pregunta (que luego fue editada por alguien) era específicamente sobre JS en PHP: ¿funcionará como combo PHP / JS en todos los servidores / navegadores? si lo voy a omitir por completo?
Obmerk Kronen

8
Puede omitir el type atributo en un <script>elemento. No puede omitir el Content-Typeencabezado HTTP ... nunca (si no lo especifica en PHP, PHP tendrá el valor predeterminado text/htmlincorrecto).
Quentin

2
Siguiendo la lógica legible para los humanos, ¿no debería clasificarse CSS también en aplicación en lugar de texto?
Fabrício Matté

2
@frnhr su edición de esta respuesta cambió el significado deseado (que era indicar que text/javascriptestá obsoleto y application/x-javascriptera experimental). Peor aún, dejó el comienzo de la respuesta incoherente, con un bloque que decía que text/javascriptsimplemente colgaba irrelevantemente en la parte superior de la respuesta sin ninguna razón obvia.
Mark Amery

1
En SVN, definitivamente use text / javascript. SVN trata todo lo que NO comienza con texto / como binario. Para arreglar su copia de trabajo SVN completa, necesita crear un archivo mime.cmd que contenga lo siguiente: @echo off for /r . %%X in (*.js) do ( svn propset svn:mime-type text/javascript "%%X" ) que cuando se ejecute, cambiará el tipo mime de todos los archivos JS en su repositorio a texto / javascript. Luego debe enviar los archivos JS a SVN con el nuevo tipo mime.
Mark Eldridge

21

los tipos mime que comienzan con x-no están estandarizados. En el caso de JavaScript, está un poco desactualizado. Adicional el segundo fragmento de código

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

requiere short_open_tagsestar habilitado. Deberías evitarlo.

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

Sin embargo, el tipo mime completamente correcto para javascript es

application/javascript

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


1
Respuesta anterior, pero no sé si es bueno comenzar con etiquetas abiertas cortas hasta que no sea una buena práctica (le recomendamos encarecidamente que deshabilite PHP-SOT de hecho)
Ben Cassinat

8

De acuerdo con RFC 4329, el tipo MIME correcto para JavaScript debe ser application/javascript. Sin embargo, las versiones anteriores de IE se ahogan en esto ya que esperan text/javascript.


77
Hasta donde yo sé, IE no le da a un mono lo que dice el tipo de contenido HTTP; solo lo que typedice el atributo HTML (y en los borradores HTML 5 ese atributo puede omitirse para JavaScript).
Quentin

@Quentin ahh ... eso es lo que me estaba dando problemas. ¡Gracias!
Martin

3

Use type = "application / javascript"

En el caso de HTML5, el atributo type es obsoleto, puede eliminarlo. Nota: que por defecto es "text / javascript" de acuerdo con w3.org, por lo que sugeriría agregar "application / javascript" en lugar de eliminarlo.

http://www.w3.org/TR/html5/scripting-1.html#attr-script-type
El atributo type proporciona el idioma del script o el formato de los datos. Si el atributo está presente, su valor debe ser un tipo MIME válido. El parámetro charset no debe especificarse. El valor predeterminado, que se usa si el atributo está ausente, es "text / javascript".

Use "application / javascript", porque "text / javascript" está obsoleto :

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

  1. Tipos de medios de secuencias de comandos implementados y compatibilidad

    Varios tipos de medios no registrados se han utilizado de manera ad-hoc para etiquetar e intercambiar programas escritos en ECMAScript y JavaScript. Éstos incluyen:

    + ------------------------------------------------- ---- + | texto / javascript | texto / ecmascript | El | texto / javascript1.0 | texto / javascript1.1 | El | texto / javascript 1.2 | texto / javascript1.3 | El | texto / javascript 1.4 | texto / javascript 1.5 | El | texto / jscript | texto / livecript | El | text / x-javascript | texto / x-ecmascript | El | aplicación / x-javascript | aplicación / x-ecmascript | El | aplicación / javascript | aplicación / ecmascript | + ------------------------------------------------- ---- +

Se sabe que el uso del tipo de "nivel superior" de texto para este tipo de contenido es problemático. Este documento define texto / javascript y texto /
ecmascript pero los marca como "obsoletos". Se
desaconseja el uso de tipos de medios experimentales y no registrados, como se enumera en la parte anterior.
Los tipos de medios,

  * application/javascript
  * application/ecmascript

que también se definen en este documento, están destinados a un uso común y deben usarse en su lugar.

Este documento define requisitos de procesamiento equivalentes para los
tipos texto / javascript, texto / ecmascript y aplicación / javascript.
El uso y soporte de la aplicación de tipo de medio / ecmascript está
considerablemente menos extendido que para otros tipos de medios definidos en
este documento. Usando eso a su favor, este documento define
reglas de procesamiento más estrictas para este tipo para fomentar un
procesamiento más interoperable .

x-javascript es experimental, no lo use.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.