Azure API 管理不会在 4xx 上发送 CORS 标头

Posted

技术标签:

【中文标题】Azure API 管理不会在 4xx 上发送 CORS 标头【英文标题】:Azure API Management doesn't send CORS header on 4xx 【发布时间】:2016-06-09 09:11:41 【问题描述】:

在我的 Azure API 管理中,我为整个 API 定义了 CORS 策略。使用 OPTIONS 命令一切正常,每次成功请求和 500 个响应都会返回 allowed-origin。

由于某种奇怪的原因,当 API 返回 401 或 403 时,allowed-origin 标头不会随响应一起发回。我从这里的前端团队了解到,这会导致麻烦,因为浏览器和/或 Angular 无法处理 XHR 响应,因为它不知道是否允许...

有谁知道为什么 API 管理会有这样的行为以及如何防止这种情况发生?

非常感谢!

彼得

【问题讨论】:

【参考方案1】:

我对@9​​87654321@ 的解读是,如果预检请求返回的不是 2XX 响应,则预检请求会失败并出现“网络错误”。没有迹象表明其他与 CORS 相关的标头应包含在响应中。

考虑以下情况:有人对不存在的资源发出预检请求,响应为 404。期望服务器为不存在的资源返回 CORS 标头似乎是不合理的。

可能值得与 Angular 团队核实一下,以了解他们为什么要检查具有非 2XX 响应的原始标头。或者,如果您能在规范中找到我应该返回哪些标头的地方,我会很乐意将这些信息传达给团队。

【讨论】:

我遇到了同样的问题,请务必在操作下添加“OPTIONS”。这是 CORS 预检所需要的

以上是关于Azure API 管理不会在 4xx 上发送 CORS 标头的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 Azure 资源管理器 API 向队列或主题发送和检索消息

在 Azure Service Fabric (API) 中从一个微服务向另一个微服务发送消息

如何在 Azure API 管理上分离开发和生产环境?

使用查询参数获取令牌的 Azure API 管理策略

在服务器响应上应用 etag 时,我们不应该为状态为 4xx 或 5xx 的响应发送 etag 吗? [关闭]

XMLHttpRequest:确定链接是否不会返回4xx状态的最快方法?