Chrome dice "Recurso interpretado como script pero transferido con texto tipo MIME/sin formato", ¿qué pasa?
En FF y todo, mi javascript funciona bien. Pero en Chrome aparece este mensaje:
Recurso interpretado como script pero transferido con texto tipo MIME/sin formato.
Revisé todas las etiquetas del script y todas tienen el archivo MIME type="text/javascript"
. Incluso lo dice con jquery y jquery ui. ¿Qué le pasa a Chrome?
¿Cuál es el problema y la solución para esto? ¿Es algo que tengo que cambiar en las 'opciones' del navegador o es desde el servidor, o tengo que modificar mi código?
Significa que el servidor está enviando una respuesta HTTP de Javascript con
Content-Type: text/plain
Debe configurar el servidor para enviar una respuesta JavaScript con
Content-Type: application/javascript
Esto no tiene nada que ver con jQuery ni con ninguna peculiaridad del código de script del lado del cliente. Es un problema del lado del servidor : el servidor (aplicación del lado) no envía el valor Content-Type
del campo de encabezado HTTP esperado para el recurso de secuencia de comandos del lado del cliente. Esto sucede si el servidor web no está suficientemente configurado, mal configurado o si una aplicación del lado del servidor (por ejemplo, PHP) está generando el recurso de script del lado del cliente.
Los tipos de medios MIME adecuados para implementaciones de ECMAScript como JavaScript incluyen:
text/javascript
(registrado como obsoleto , no obsoleto; pero aún válido y con el mejor soporte )text/ecmascript
(registrado como obsoleto , no obsoleto; pero sigue siendo válido )application/javascript
application/ecmascript
No incluyen , ya que los tipos de medios application/x-javascript
MIME enumerados anteriormente son los que ya están registrados en el árbol de estándares (por lo que ya no hay necesidad, ni debería quererse, usar medios experimentales). Cfr. RFC 4329, "Tipos de medios de secuencias de comandos" (2005 CE) y mi caso de prueba: compatibilidad con tipos de medios de secuencias de comandos .
Una solución es configurar el servidor si es posible, como ya se recomendó. Para Apache, esto puede ser tan simple como agregar la directiva
AddType text/javascript .js
(consulte la documentación del servidor Apache HTTP para obtener más detalles).
Pero si el recurso de secuencia de comandos del lado del cliente es generado por una aplicación del lado del servidor, como PHP, entonces es necesario establecer el Content-Type
valor del campo de encabezado explícitamente, ya que el valor predeterminado probablemente sea text/html
:
<?php
header('Content-Type: text/javascript; charset=UTF-8');
// ...
?>
(Esa y declaraciones similares deben aparecer antes de cualquier otra salida; consulte el manual de PHP ; de lo contrario, se considera que el cuerpo del mensaje HTTP ya ha comenzado y es demasiado tarde para enviar más campos de encabezado).
La generación del lado del servidor puede ocurrir fácilmente con un recurso de script del lado del cliente incluso si tiene archivos .js simples en el servidor, si se eliminan los comentarios de ellos a medida que se publican, si están todos empaquetados en una respuesta grande (para reducir el número de solicitudes, que puede ser más eficiente), o son minimizados por la aplicación del lado del servidor de cualquier otra manera.