我正在使用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
为了解决这个问题,我发现您可以使用JSONP
或CORS
或使用--disable-web-security
启动chrome,我可以找到足够的打字稿支持来开始使用JSONP。但我后来发现,当我收到以下错误时,JSONP希望MIME类型为application / javascript
拒绝执行来自' https://sonarqube.com/api/projects/index'的脚本因为它的MIME类型(' application / json')不可执行,并且启用了严格的MIME类型检查。
有没有办法强制JSONP模块获取JSON数据并成功解析它?
答案 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标头添加到代理请求中。