Javascript 角度4:无';访问控制允许原点';,但仅限于post请求

Javascript 角度4:无';访问控制允许原点';,但仅限于post请求,javascript,angular,api,cors,Javascript,Angular,Api,Cors,我知道这个话题上已经有一些问题了,但我似乎找不到解决问题的办法 我是angular 4的新手,我正在尝试使用外部自定义API构建一个简单的创建/更新/删除服务 我第一次遇到CORS的问题,但通过在api的服务器端设置“Access Control Allow Origin”头,这一问题得到了解决 现在,我的GET/PATCH和DELETE请求工作正常,但我的“POST”仍然捕捉到一个错误 这里是“奇怪”的部分 当我查看google chrome开发工具的“网络”选项卡时,我会看到“选项”和“PO

我知道这个话题上已经有一些问题了,但我似乎找不到解决问题的办法

我是angular 4的新手,我正在尝试使用外部自定义API构建一个简单的创建/更新/删除服务

我第一次遇到CORS的问题,但通过在api的服务器端设置“Access Control Allow Origin”头,这一问题得到了解决

现在,我的GET/PATCH和DELETE请求工作正常,但我的“POST”仍然捕捉到一个错误

这里是“奇怪”的部分

当我查看google chrome开发工具的“网络”选项卡时,我会看到“选项”和“POST”请求(正如angular应该做的那样),但只有“选项”在响应标题中有“访问控制允许来源:”字样

但是,它们都发送“200”响应代码。(这里是)

当其他人工作正常时,为什么post会中断

以下是我的服务中的一些代码示例:

private headers = new Headers({'Content-Type': 'application/json'});

// works
update(id: number, fields: any): Promise<Tag> {
    const url = `${this.tagsUrl}/${id}`;
    return this.http
        .patch(url, JSON.stringify(fields), {headers: this.headers})
        .toPromise()
        .then(res => res.json())
        .catch(this.handleError);
}

// doesn't work
create(tagName: string, tagType: number): Promise<any> {
    return this.http
        .post(this.tagsUrl, JSON.stringify({name: tagName, tagType: tagType}), {headers: this.headers})
        .toPromise()
        .then(res => res.json())
        .catch(this.handleError);
}
private headers=新的头({'Content-Type':'application/json'});
//工作
更新(id:编号,字段:任意):承诺{
常量url=`${this.tagsUrl}/${id}`;
返回此文件。http
.patch(url,JSON.stringify(字段),{headers:this.headers})
.toPromise()
.then(res=>res.json())
.接住(这个.把手错误);
}
//不起作用
创建(标记名:字符串,标记类型:数字):承诺{
返回此文件。http
.post(this.tagsUrl,JSON.stringify({name:tagName,tagType:tagType}),{headers:this.headers})
.toPromise()
.then(res=>res.json())
.接住(这个.把手错误);
}
提前感谢您带来的任何帮助


迈克尔

我终于找到了问题的根源

它来自我的本地服务器配置。我不得不从php.ini中取消注释这一行:

always_populate_raw_post_data = -1
它现在按预期工作


感谢您的帮助。

这不是一个与角度相关的问题。是后端出错了。我建议在与后端相同的主机上运行Angular。所以它会跳过飞行前的训练,这会让人感到痛苦。我会试着与后端负责人一起寻找解决方案。但是,为什么问题只出现在“post”中,而没有任何其他方法?那么,该post是不允许的。我不确定飞行前是否只附带POST,但只要谷歌一下,你就会找到答案。