私は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);
}
});
これを回避する方法はありますか。
コールバック引数を追加することで、XMLHttpRequestを使用したJSONに対するリクエストではなく、script要素を使用したJSONPに対するリクエストを作成したいことをjQueryに伝えます。
JSONPはJSONではありません。 JavaScriptプログラムです。
サーバーを変更して、application/javascript
であるJSONPの正しいMIMEタイプを出力します。
(あなたがそれを見ている間は、JSONを期待しているとjQueryに伝えるのは矛盾しているのでdataType: 'jsonp'
)。
プロキシサーバーまたはコンテナが.jsファイルを提供するときに次のヘッダーを追加すると、Chromeなどの一部のブラウザでMIMEタイプの厳密なチェックが強制されます。
X-Content-Type-Options: nosniff
ChromeがMIMEチェックを実行しないようにするには、このヘッダーを削除します。
ちなみに、私はChromeのコンソールから同じエラーを得ました。 AJAX関数が原因と考えていましたが、縮小スクリプトのコメントを/javascripts/ajax-Vanilla.min.js
から/javascripts/ajax-Vanilla.js
に変更しました。しかし、実際にはソースファイルは/javascripts/src/ajax-Vanilla.js
にありました。そのため、Chromeではファイルが見つからなくても不正なMIMEタイプエラーが発生します。この場合、エラーメッセージはtext/plain
bad MIME typeとして記述されます。
私はカスタム404エラーページでIIS 7.0を使用してこのエラーに遭遇しましたが、私はこれがどの404ページでも起こると思われます。サーバーはtext/html mimeタイプのhtml 404応答を返しましたが、これは(正しく)実行できませんでした。
レコードおよびGoogle検索ユーザーの場合 、あなたが.NET Core開発者であれば、デフォルト値がnullまたは空なのでcontent-typesを手動で設定する必要があります。
var provider = new FileExtensionContentTypeProvider();
app.UseStaticFiles(new StaticFileOptions
{
ContentTypeProvider = provider
});
アプリケーションがIISでホストされている場合は、静的コンテンツがインストールされていることを確認してください。 [コントロールパネル]> [プログラム]> [Windowsの機能の有効化または無効化]> [インターネットインフォメーションサービス]> [World Wide Webサービス]> [一般的なHTTP機能]> [静的コンテンツ]。
新しいIIS 10.0インストールで既存のアプリケーションを実行しようとすると、この問題に直面しました。
私の場合は、
$.getJSON(url, function(json) { ... });
(FlickrのAPIに)リクエストを送信すると、同じMIMEエラーが発生しました。上記の回答のように、次のコードを追加します。
$.ajaxSetup({ dataType: "jsonp" });
問題を修正し、ChromeのコンソールにMIMEタイプエラーが表示されなくなりました。