Chrome si rifiuta di eseguire uno script AJAX a causa di un tipo MIME errato


146

Sto provando ad accedere a uno script come JSON tramite AJAX, che funziona bene su Safari e altri browser ma sfortunatamente non verrà eseguito in Chrome. Sta arrivando con il seguente errore:

Si è rifiutato di eseguire lo script da '*' perché il suo tipo MIME ('application / json') non è eseguibile e il controllo rigoroso del tipo MIME è abilitato.

Ecco la richiesta:

$.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);
    }
});

Qualcuno ha una soluzione alternativa per questo?


2
Allora, cos'è questa risorsa? Uno script JSONP o un file JSON? Il suo tipo MIME corrisponde a quello? Apparentemente no. Non c'è bisogno di una soluzione alternativa, basta risolverlo .
Bergi,

la rimozione del callback e l'utilizzo di dataType jsonp non risolvono il problema
Paul Nelligan,

2
Intendevo correggere la risposta del server .
Bergi,

5
@Bergi: cosa succede se il server è fuori dal controllo del PO? Forse sta cercando di utilizzare un'API esterna come LinkedIn .
Dan Dascalescu,

2
@DanDascalescu: dovrebbe segnalarlo come un bug, perché rende l'API inutilizzabile. In attesa che venga risolto, può utilizzare un proxy che modifica il tipo o il contenuto di mime.
Bergi,

Risposte:


70

Aggiungendo un argomento di callback, stai dicendo a jQuery che vuoi fare una richiesta per JSONP usando un elemento script invece di una richiesta per JSON usando XMLHttpRequest.

JSONP non è JSON. È un programma JavaScript.

Cambia il tuo server in modo che emetta il giusto tipo MIME per JSONP che è application/javascript.

(Mentre ci sei, smetti di dire a jQuery che ti aspetti che JSON sia contraddittorio:) dataType: 'jsonp'.


1
Devo usare Ajax tra due siti. Guidami su ciò di cui stai parlando per impostare "Cambia il tuo server in modo che emetta il giusto tipo MIME per JSONP che è application / javascript". Come fare questo
Taimoor Changaiz,

@TaimoorChangaiz - Non posso dirtelo. Se stai generando file statici, dipende dal server che stai utilizzando. Se stai generando dinamicamente il contenuto, dipende dal linguaggio di programmazione (e possibilmente dal framework) che stai utilizzando. Prova a porre una domanda che descriva ciò che hai finora ed esattamente dove sei bloccato.
Quentin,

grazie compagno. Tra l'altro ho capito problema. Stavo usando file dinamici
Taimoor Changaiz il

20
"Cambia il tuo server" non funziona se stai cercando di utilizzare un'API esterna come LinkedIn .
Dan Dascalescu,

1
@Quentin È importante poiché le domande dovrebbero essere utili agli altri, non solo all'OP. Google mi ha indicato qui e questo non aiuta il mio caso
Juan Mendes, il

56

Se il tuo server proxy o contenitore aggiunge la seguente intestazione durante la pubblicazione del file .js, imporrà ad alcuni browser come Chrome di eseguire un controllo rigoroso dei tipi MIME:

X-Content-Type-Options: nosniff

Rimuovi questa intestazione per impedire a Chrome di eseguire il controllo MIME.


14
È una cattiva pratica non fornire l'intestazione Content-Type delle risorse offerte nelle applicazioni Web. Evitare lo sniffing MIME dal lato server (usando l' X-Content-Type-Options: nosniffintestazione) è una buona opzione per prevenire attacchi di sniffing del contenuto.
Andrés Morales,

Ho dovuto aggiungere questo come parte di un controllo di sicurezza - ora non so cosa fare !! :-(
James Poulose

11

Cordiali saluti, ho lo stesso errore dalla console di Chrome. Ho pensato che la mia funzione AJAX lo causasse, ma ho decommentato il mio script minimizzato da /javascripts/ajax-vanilla.min.jsa /javascripts/ajax-vanilla.js. Ma in realtà il file sorgente era a /javascripts/src/ajax-vanilla.js. Quindi in Chrome si ottiene un errore di tipo MIME non valido anche se il file non può essere trovato. In questo caso, il messaggio di errore è descritto come text/plaintipo MIME errato .


1
Grazie mille! Anche questo era il mio problema. Era nella directory sbagliata.
Ellisan,

2
Mi hai salvato 1 ora campione oggi! Grazie
Beto Aveiga,

1

Ho riscontrato questo errore utilizzando IIS 7.0 con una pagina di errore 404 personalizzata, anche se sospetto che ciò accadrà con qualsiasi pagina 404. Il server ha restituito una risposta HTML 404 con un tipo mime text / html che non poteva (giustamente) essere eseguito.


Abbiamo avuto un problema simile, il contenuto restituito era un 302 (perché l'utente non era autenticato) e non aveva affatto un tipo di contenuto -> non eseguibile.
Pasi Savolainen,

1

Per gli utenti del record e della ricerca Google , se sei uno sviluppatore .NET Core, devi impostare manualmente i tipi di contenuto, poiché il loro valore predefinito è nullo o vuoto:

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

0

Nel mio caso, io uso

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

per fare la richiesta (all'API di Flickr) e ho ricevuto lo stesso errore MIME. Come la risposta sopra suggerita, aggiungendo il seguente codice:

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

Risolto il problema e non vedo più l'errore di tipo MIME nella console di Chrome.


0

se l'applicazione è ospitata su IIS, assicurarsi che il contenuto statico sia installato. Pannello di controllo> Programmi> Attiva o disattiva le funzionalità di Windows> Internet Information Services> World Wide Web Services> Funzionalità HTTP comuni> Contenuto statico.

Ho riscontrato questo problema durante il tentativo di eseguire un'applicazione esistente su una nuova installazione di IIS 10.0

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.