【问题标题】:Angular 4 : No 'Access-Control-Allow-Origin', but only with post requestsAngular 4:没有“Access-Control-Allow-Origin”,但只有发布请求
【发布时间】:2018-03-14 17:12:19
【问题描述】:

我知道已经有一些关于该主题的问题,但我似乎无法找到解决问题的方法。

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

我首先遇到了 CORS 的问题,但是通过在 api 的服务器端设置“Access-Control-Allow-Origin”标头来解决这个问题。

现在我的 GET/PATCH 和 DELETE 请求工作正常,但我的“POST”仍然出现错误。

这是“奇怪”的部分。

当我查看谷歌浏览器开发工具的“网络”选项卡时,我看到“OPTIONS”和“POST”请求(正如 Angular 应该做的那样),但只有“OPTIONS”具有“访问控制” -Allow-Origin:http://localhost:3003" 在响应头中。

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

为什么在其他人工作正常的情况下帖子会中断?

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

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);
}

提前感谢您提供的任何帮助!

迈克尔

【问题讨论】:

  • 这不是 Angular 相关的问题。是后端做错了。我建议在与后端相同的主机上运行 Angular。所以它跳过 preflight 它可能会变得很痛苦。
  • 我明白了。我会尝试与后端负责人一起寻找解决方案。但是为什么问题只出现在“发布”而不是任何其他方法?
  • 那么后台不允许发帖。我不确定 preflight 是否仅附带 POST,但只需 google 一下,您就会找到答案。

标签: javascript angular api cors


【解决方案1】:

我终于找到问题出在哪里了。

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

always_populate_raw_post_data = -1

它现在按预期工作。

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-12
    • 2018-03-28
    • 2015-07-03
    • 1970-01-01
    • 2021-09-28
    • 2018-09-26
    • 2017-10-18
    相关资源
    最近更新 更多