可以强制Angular 2的JSONP模块读取MIME类型(' application / json')?

时间:2016-10-05 11:07:11

标签: json angular jsonp

我正在使用JSONP模块调用SonarQube API。

this.jsonp.get('https://sonarqube.com/api/projects/index')
    .subscribe(res => console.log(res));

我之前使用过Angualar2的Http模块,导致浏览器抛出错误

  

Access-Control-Allow-Origin

不允许原点http://localhost:4200

为了解决这个问题,我发现您可以使用JSONPCORS或使用--disable-web-security启动chrome,我可以找到足够的打字稿支持来开始使用JSONP。但我后来发现,当我收到以下错误时,JSONP希望MIME类型为application / javascript

  

拒绝执行来自' https://sonarqube.com/api/projects/index'的脚本因为它的MIME类型(' application / json')不可执行,并且启用了严格的MIME类型检查。

有没有办法强制JSONP模块获取JSON数据并成功解析它?

1 个答案:

答案 0 :(得分:2)

解决方案1:在服务器中启用JSONP

我发现这是不可能的。 JSONP只是克服Cross-Origin-Requests problem的一种方法,但它需要修改服务器配置/实现以提供JSONP数据(MIME-type: application/javascript)。

解决方案2:在服务器中启用CORS支持

CORS是Cross-Origin-Requests问题的最新解决方案。可以通过将以下标头添加到服务器来解决此问题:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST,GET,PUT,DELETE
Access-Control-Allow-Headers: Authorization, Lang

解决方案3:使用反向代理

我在搜索中遇到的一个建议是使用服务器来获取Cross-Origin-Request 。我没有控制服务器代码。然后我遇到了Reverse Proxies的概念,在角度论坛中找到了cors-anywhere包。反向代理代表您的前端获取这些资源,并将CORS标头添加到代理请求中。