web-dev-qa-db-ja.com

Chromeは実行を拒否します AJAX MIMEタイプが間違っているためのスクリプト

私はAJAX経由でJSONとしてスクリプトにアクセスしようとしています。これはSafariや他のブラウザでは問題なく動作しますが、残念ながらChromeでは実行されません。次のようなエラーが表示されます。

MIMEタイプ( 'application/json')が実行可能ではなく、厳密なMIMEタイプチェックが有効になっているため、 '*'からスクリプトを実行することを拒否されました。

これが要求です。

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

これを回避する方法はありますか。

140
Paul Nelligan

コールバック引数を追加することで、XMLHttpRequestを使用したJSONに対するリクエストではなく、script要素を使用したJSONPに対するリクエストを作成したいことをjQueryに伝えます。

JSONPはJSONではありません。 JavaScriptプログラムです。

サーバーを変更して、application/javascriptであるJSONPの正しいMIMEタイプを出力します。

(あなたがそれを見ている間は、JSONを期待しているとjQueryに伝えるのは矛盾しているのでdataType: 'jsonp')。

68
Quentin

プロキシサーバーまたはコンテナが.jsファイルを提供するときに次のヘッダーを追加すると、Chromeなどの一部のブラウザでMIMEタイプの厳密なチェックが強制されます。

X-Content-Type-Options: nosniff

ChromeがMIMEチェックを実行しないようにするには、このヘッダーを削除します。

53
Tom Chamberlain

ちなみに、私はChromeのコンソールから同じエラーを得ました。 AJAX関数が原因と考えていましたが、縮小スクリプトのコメントを/javascripts/ajax-Vanilla.min.jsから/javascripts/ajax-Vanilla.jsに変更しました。しかし、実際にはソースファイルは/javascripts/src/ajax-Vanilla.jsにありました。そのため、Chromeではファイルが見つからなくても不正なMIMEタイプエラーが発生します。この場合、エラーメッセージはtext/plain bad MIME typeとして記述されます。

10
Lanti

私はカスタム404エラーページでIIS 7.0を使用してこのエラーに遭遇しましたが、私はこれがどの404ページでも起こると思われます。サーバーはtext/html mimeタイプのhtml 404応答を返しましたが、これは(正しく)実行できませんでした。

1
James Westgate

レコードおよびGoogle検索ユーザーの場合 、あなたが.NET Core開発者であれば、デフォルト値がnullまたは空なのでcontent-typesを手動で設定する必要があります。

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

アプリケーションがIISでホストされている場合は、静的コンテンツがインストールされていることを確認してください。 [コントロールパネル]> [プログラム]> [Windowsの機能の有効化または無効化]> [インターネットインフォメーションサービス]> [World Wide Webサービス]> [一般的なHTTP機能]> [静的コンテンツ]。

新しいIIS 10.0インストールで既存のアプリケーションを実行しようとすると、この問題に直面しました。

0
user890255

私の場合は、

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

(FlickrのAPIに)リクエストを送信すると、同じMIMEエラーが発生しました。上記の回答のように、次のコードを追加します。

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

問題を修正し、ChromeのコンソールにMIMEタイプエラーが表示されなくなりました。

0
Daniel