Javascript - 拒绝从URL执行脚本,因为它的MIME类型('application / json')不可执行,并且启用了严格的MIME类型检查

时间:2018-06-10 21:05:23

标签: javascript jquery html api web

当我从索引中调用JavaScript文件时,我遇到了这个问题。 这是我的JavaScript文件(jQuery):

Refused to execute script from 'https://api.blockchain.info/pools?
timespan=5days&callback=jQuery33105603115327243822_1528663793253&_=1528663793254
' because its MIME type ('application/json') is not executable, and strict MIME type checking is enabled.

这是我尝试从API获取json文件时出现的错误:

<unicode>

提前致谢!

1 个答案:

答案 0 :(得分:1)

您尝试使用旧的hacky方法来解决称为JSON-P的跨源限制。

基本上,这是通过将<script>元素注入到指定了URL的页面中来实现的。在全局空间中设置具有自动生成名称(由jQuery生成)的回调。服务器在查询字符串中看到此callback=someCallback参数,而不是返回JSON,它返回的JavaScript类似于:

someCallback(...data...);

浏览器然后执行这个脚本就像任何其他脚本一样,使用结果数据调用回调,一切都很顺利。

除了返回的数据外,大多数HTTP响应都有一些标头。其中一个是Content-Type,它向浏览器指示它获得了什么类型的数据,因此它知道如何处理它。可执行JavaScript的Content-Type(通常称为MIME类型)通常为application/javascript。正如错误消息所示,application/json不可执行。

问题是两件事之一:

  1. 此API不支持JSON-P。(而且,它不应该!现在CORS得到很好的支持,不需要JSON-P 。)尝试删除callback参数,看看会发生什么。根据我在回复中看到的内容,这就是问题所在。
  2. API支持JSON-P,但在其响应标头中返回错误的Content-Type值。 (如果这是你的问题,你可以做任何事情来解决它没有代理响应的问题。虽然你的情况不是问题。)