Chrome se niega a ejecutar un script AJAX debido a un tipo MIME incorrecto


146

Estoy tratando de acceder a un script como JSON a través de AJAX, que funciona bien en Safari y otros navegadores, pero desafortunadamente no se ejecutará en Chrome. Viene con el siguiente error:

Se negó a ejecutar el script desde '*' porque su tipo MIME ('application / json') no es ejecutable, y la verificación estricta del tipo MIME está habilitada.

Aquí está la solicitud:

$.ajax({
    url: "http://some_url/test.json?callback=?",
    type: "GET",
    dataType: 'json',
    cache: true,
    success: function (data, status, error) {
      console.log('success', data);
    },
    error: function (data, status, error) {
      console.log('error', data, status, error);
    }
});

¿Alguien tiene una solución para esto?


2
Entonces, ¿qué es este recurso? ¿Un script JSONP o un archivo JSON? ¿Su tipo MIME coincide con eso? Aparentemente no. No hay necesidad de una solución, solo arréglalo .
Bergi

eliminar la devolución de llamada y usar dataType jsonp no soluciona el problema
Paul Nelligan

2
Quise decir, arreglar la respuesta del servidor .
Bergi

55
@ Bergi: ¿y si el servidor está fuera del control del OP? Tal vez está tratando de usar una API externa como LinkedIn .
Dan Dascalescu

2
@DanDascalescu: Debería informar esto como un error, porque hace que la API sea inutilizable. Mientras espera que esto se solucione, puede usar un proxy que cambie el tipo o contenido de mime.
Bergi

Respuestas:


70

Al agregar un argumento de devolución de llamada, le está diciendo a jQuery que desea realizar una solicitud de JSONP utilizando un elemento de script en lugar de una solicitud de JSON utilizando XMLHttpRequest.

JSONP no es JSON. Es un programa de JavaScript.

Cambie su servidor para que muestre el tipo MIME correcto para JSONP, que es application/javascript.

(Mientras estás en ello, deja de decirle a jQuery que esperas que JSON sea contradictorio:) dataType: 'jsonp'.


1
Tengo que usar ajax entre dos sitios. Guíeme acerca de lo que está hablando para configurar "Cambiar su servidor para que muestre el tipo MIME correcto para JSONP que es aplicación / javascript". Cómo hacer esto
Taimoor Changaiz

@TaimoorChangaiz - No puedo decirte eso. Si está generando archivos estáticos, depende del servidor que esté utilizando. Si está generando dinámicamente el contenido, depende del lenguaje de programación (y posiblemente del marco) que esté utilizando. Intente hacer una pregunta que describa lo que tiene hasta ahora y exactamente dónde está atrapado.
Quentin

gracias amigo. Por cierto, descubrí el problema. Estaba usando archivos dinámicos
Taimoor Changaiz

20
"Cambiar su servidor" no funciona si está intentando utilizar una API externa como LinkedIn .
Dan Dascalescu

1
@Quentin Es importante ya que se supone que las preguntas son útiles para otros, no solo para el OP. Google me señaló aquí y esto no ayuda a mi caso
Juan Mendes

56

Si su servidor proxy o contenedor agrega el siguiente encabezado al servir el archivo .js, obligará a algunos navegadores como Chrome a realizar una comprobación estricta de los tipos MIME:

X-Content-Type-Options: nosniff

Elimine este encabezado para evitar que Chrome realice la verificación MIME.


14
Es una mala práctica no proporcionar el encabezado Content-Type de los recursos servidos en las aplicaciones web. Evitar la detección de MIME desde el lado del servidor (usando el X-Content-Type-Options: nosniffencabezado) es una buena opción para evitar ataques de detección de contenido.
Andrés Morales

Tuve que agregar esto como parte de una auditoría de seguridad, ¡ahora no sé qué hacer! :-(
James Poulose

11

FYI, tengo el mismo error de la consola de Chrome. Pensé que mi función AJAX lo causaba, pero descomenté mi script minified de /javascripts/ajax-vanilla.min.jsa /javascripts/ajax-vanilla.js. Pero en realidad el archivo fuente estaba en /javascripts/src/ajax-vanilla.js. Entonces, en Chrome, obtienes un error de tipo MIME incorrecto incluso si no se puede encontrar el archivo. En este caso, el mensaje de error se describe como text/plainun tipo MIME incorrecto.


1
¡Muchas gracias! Este fue mi problema también. Estaba en el directorio equivocado.
Ellisan

2
¡Me salvaste 1 hora hoy campeón! Gracias
Beto Aveiga

1

Encontré este error usando IIS 7.0 con una página de error 404 personalizada, aunque sospecho que esto sucederá con cualquier página 404. El servidor devolvió una respuesta html 404 con un tipo text / html mime que no se pudo ejecutar (correctamente).


Tuvimos un problema similar, el contenido devuelto era un 302 (porque el usuario no se autenticó) y no tenía ningún tipo de contenido -> no ejecutable.
Pasi Savolainen el

1

Para el registro y los usuarios de búsqueda de Google , si es un desarrollador de .NET Core, debe configurar los tipos de contenido manualmente, porque su valor predeterminado es nulo o vacío:

var provider = new FileExtensionContentTypeProvider();
app.UseStaticFiles(new StaticFileOptions
{
    ContentTypeProvider = provider
});

0

En mi caso, yo uso

$.getJSON(url, function(json) { ... });

para hacer la solicitud (a la API de Flickr), y obtuve el mismo error MIME. Como sugiere la respuesta anterior, agregue el siguiente código:

$.ajaxSetup({ dataType: "jsonp" });

Se solucionó el problema y ya no veo el error de tipo MIME en la consola de Chrome.


0

Si la aplicación está alojada en IIS, asegúrese de que el Contenido estático esté instalado. Panel de control> Programas> Activar o desactivar las funciones de Windows> Servicios de información de Internet> Servicios de la World Wide Web> Funciones HTTP comunes> Contenido estático.

Me enfrenté a este problema al intentar ejecutar una aplicación existente en una nueva instalación de IIS 10.0

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.