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

问题描述 投票:1回答:1

我正在使用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数据并成功解析它?

json angular jsonp
1个回答
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标头添加到代理请求中。

© www.soinside.com 2019 - 2024. All rights reserved.