如何更改使用角度6,离子4作为前端和scala作为后端的混合应用程序的CORS政策?

时间:2018-12-18 11:17:51

标签: angular scala ionic-framework

我正在尝试将post方法用于登录目的,以下代码:

log(data){
    let vals =  JSON.stringify(data.value);
    let headerOptions = new HttpHeaders();
    headerOptions.append('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');
    return this.http.post("http://IP_server:88/mLog" , vals, { headers: headerOptions}).pipe(tap(
    res=>{ console.log('data: '+res) },
    err=> console.log(err) ));
}

我收到如下错误:

从原点“ http://IP_server:88/mLog”到“ http://localhost:8080”处对XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:否'Access-Control-Allow-来源的标头出现在请求的资源上。

3 个答案:

答案 0 :(得分:0)

在Angular 6中,必须使用httpClient标头与所有端点标头一起传递。下面是功能:

  getHeader() {
    const httpOptions = {
      headers: new HttpHeaders({
        'Content-Type': 'application/json',
        "Access-Control-Allow-Origin": "*"
      })
    };
    return httpOptions;
  }

调用此函数并将httpOptions传递给所有端点。否则,您必须在Java端进行更改。.他们必须设置跨原点的标头。

答案 1 :(得分:0)

您可以从浏览器中访问该网址并获得预期的响应吗?
如果是,则不需要来更改UI / JavaScript代码。
需要从服务器端/ Java代码启用 CORS 过滤器。

答案 2 :(得分:0)

离子应用程序(android,ios和离子服务)在本地主机上工作。默认情况下,Web API不允许来自其他来源的请求。

因此,您有3个选择:

  1. 允许在Web api /服务器中进行跨源请求。
  2. 在离子应用程序link中设置代理。我试过了它在android中没有在ios中工作。
  3. 使用离子本机http link(推荐),它将同时解决这两个问题。