Angular Ionic HTTP客户端post请求跨源错误,但对邮递员有效

Angular Ionic HTTP客户端post请求跨源错误,但对邮递员有效,angular,ionic-framework,Angular,Ionic Framework,我正在尝试在我的ionic应用程序中执行以下post请求,在那里我得到以下错误 已被CORS策略阻止:对飞行前请求的响应 未通过访问控制检查:无“访问控制允许来源” 请求的资源上存在标头。 但同样的请求在同一台电脑中使用postman时也能完美执行。感谢您的宝贵帮助 邮递员回应 离子HTTP Post请求 import { HttpClient, HttpHeaders } from '@angular/common/http'; constructor(public men

我正在尝试在我的ionic应用程序中执行以下post请求,在那里我得到以下错误

已被CORS策略阻止:对飞行前请求的响应
未通过访问控制检查:无“访问控制允许来源”
请求的资源上存在标头。

但同样的请求在同一台电脑中使用postman时也能完美执行。感谢您的宝贵帮助

邮递员回应

离子HTTP Post请求

import {
    HttpClient,
    HttpHeaders
} from '@angular/common/http';

constructor(public menuCtrl: MenuController, private http: HttpClient, private router: Router, private alertController: AlertController,
    public loadingController: LoadingController) {
    window.sessionStorage.setItem("ip", "myapi.com");
}


let authorizationData = 'Basic ' + btoa(this.username.trim() + ':' + this.password.trim());
window.sessionStorage.setItem("auth", authorizationData);

const httpOptions = {
    headers: new HttpHeaders({
        'Access-Control-Allow-Origin': '*',
        'Content-Type': 'application/json; charset=utf-8',
        'Authorization': authorizationData
    })
};

console.log(authorizationData);
this.present();


this.http.post('https://' + window.sessionStorage.getItem('ip') + '/OffsiteAtmMonitoring/login/submit', {}, httpOptions)
    .subscribe(
        data => {


            window.sessionStorage.setItem("name", data["name"]);
            window.sessionStorage.setItem("firstname", data["firstname"]);
            window.sessionStorage.setItem("lastname", data["lastname"]);
            window.sessionStorage.setItem("username", data["username"]);
    }

您的请求在邮递员中有效,因为它不发送航班前请求。你应该阅读,否则我会在问题的第二部分简单地解释cors是如何在高水平上工作的,也许你会发现它很有用

几乎可以肯定存在服务器问题,但您确实有一些不需要的头

const httpOptions = {
    headers: new HttpHeaders({
        'Access-Control-Allow-Origin': '*',
        'Content-Type': 'application/json; charset=utf-8',
        'Authorization': authorizationData
    })
};
'Access-Control-Allow-Origin':“*”
这不是必需的。如果您的服务器允许来自所有来源的请求,那么它应该对此做出响应

如果要发送身份验证数据,服务器还需要使用
访问控制允许凭据:true
进行响应

在我认为可以接受的客户端(ionic)上没有办法修复它。您可以使用cors代理,但我认为这不是一个可接受的解决方案

也许有办法进行黑客修复,以防止Cors请求在android和ios上发送,并避免使用代理,但我不确定这一点。我的建议是,如果可能的话,请正确配置要连接的API。
这是可靠地连接到来自不同来源的API的唯一方法

您的请求在postman中有效,因为它不发送飞行前请求。你应该阅读,否则我会在问题的第二部分简单地解释cors是如何在高水平上工作的,也许你会发现它很有用

几乎可以肯定存在服务器问题,但您确实有一些不需要的头

const httpOptions = {
    headers: new HttpHeaders({
        'Access-Control-Allow-Origin': '*',
        'Content-Type': 'application/json; charset=utf-8',
        'Authorization': authorizationData
    })
};
'Access-Control-Allow-Origin':“*”
这不是必需的。如果您的服务器允许来自所有来源的请求,那么它应该对此做出响应

如果要发送身份验证数据,服务器还需要使用
访问控制允许凭据:true
进行响应

在我认为可以接受的客户端(ionic)上没有办法修复它。您可以使用cors代理,但我认为这不是一个可接受的解决方案

也许有办法进行黑客修复,以防止Cors请求在android和ios上发送,并避免使用代理,但我不确定这一点。我的建议是,如果可能的话,请正确配置要连接的API。
这是从不同来源可靠连接到API的唯一方法,使用代理绕过Ionic 4的CORS问题实际上非常简单明了,您只需执行以下操作:

使用文本编辑器打开存在于项目根目录中的ionic.config.json

接下来添加一个代理数组,如下例所示

    "name": "proxy-example",
    "app_id": "id",
    "v2": true,
    "typescript": true,
    "proxies": [{
        "path": "/goto",
        "proxyUrl": "http://target-server.com"
    }]
    }
您只需添加代理数组,其他值保留在原始的IONAL.config.json中

proxyUrl应该包含要连接到的服务器,该服务器会显示CORS问题


该路径是我们将在Ionic项目中用于向目标服务器发送请求的路径,Ionic代理将负责将请求代理到实际的目标API服务器。

使用代理绕过Ionic 4的CORS问题实际上非常简单明了,您只需做以下操作:

使用文本编辑器打开存在于项目根目录中的ionic.config.json

接下来添加一个代理数组,如下例所示

    "name": "proxy-example",
    "app_id": "id",
    "v2": true,
    "typescript": true,
    "proxies": [{
        "path": "/goto",
        "proxyUrl": "http://target-server.com"
    }]
    }
您只需添加代理数组,其他值保留在原始的IONAL.config.json中

proxyUrl应该包含要连接到的服务器,该服务器会显示CORS问题


该路径是我们将在Ionic项目中用于向目标服务器发送请求的路径,Ionic代理将负责将请求代理到实际的目标API服务器。

此错误来自API end。请参考此文档谢谢您的评论,我可以从Ionic方面执行任何方法吗?对于cors问题,Ionic方面没有任何方法。此错误来自api端。请参考此文件谢谢您的评论,我是否可以从爱奥尼亚方面执行任何方法?对于cors问题,爱奥尼亚方面没有任何方法