NGiNX - 没有为错误返回足够的标头(4xx,5xx)与成功(2xx)

Posted

技术标签:

【中文标题】NGiNX - 没有为错误返回足够的标头(4xx,5xx)与成功(2xx)【英文标题】:NGiNX - Not returning sufficient headers for error(4xx, 5xx) Vs Success(2xx) 【发布时间】:2019-04-03 02:54:00 【问题描述】:

朋友们好,

我在同一 context 但从 angular 的角度独立询问 a question。

请参考我的nginx 服务器configuration。

我正在逐步解决的是,每当我的Angular 应用程序的REST 请求成功(200) 从服务器返回(NGiNX 安装位置) 在这种情况下 NGiNX 返回 sufficient headersresponse 并且我能够成功处理它Vs 错误请求/响应。

特殊情况是,我无法获得request status例如,如果我的 API 返回 401, 400, 500.. except 200 在这种情况下,我的 angular Apphttp response-status 作为“零( 0)",无论服务器返回什么。我的主要假设是由于要么 CORS 问题(主要是所有建议修复)或一些隐藏的问题(对我来说)。

在 Angular 中,我可以看到以下内容(请参阅屏幕截图),

我的假设是,如果 CORS 问题,那么我的 200 请求响应也必须 不是服务器。所以我的猜测是我配置正确的 CORS。

任何帮助将不胜感激!

注意 -

    我很困惑是NGiNX 方面的问题还是Angular 方面。这就是为什么我在不同的标签下问同样的问题(Angular, Nginx)。 我还在服务器端实现了 SSL。所以也请考虑这个案例。

【问题讨论】:

【参考方案1】:

要为 4xx 和 5xx 错误添加标头:设置标头时,必须使用always 参数:

add_header <header_name> <value> always

请参阅http://nginx.org/en/docs/http/ngx_http_headers_module.html#add_header 的文档:

如果响应代码等于 200, 201 (1.3.10), 204, 206, 301, 302, 303, 304, 307 (1.1.16, 1.0.13) 或308 (1.13.0)…如果指定always参数(1.7.5),无论响应码如何,都会添加头部字段。

【讨论】:

以上是关于NGiNX - 没有为错误返回足够的标头(4xx,5xx)与成功(2xx)的主要内容,如果未能解决你的问题,请参考以下文章

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

Nginx 添加标头 PHP FPM 返回错误

5xx 或 4xx 错误,“不存在 'Access-Control-Allow-Origin' 标头”

5xx 或 4xx 错误,“不存在 'Access-Control-Allow-Origin' 标头”

如何在 ASPNET.Core Web 应用程序中发送带有 CORS 标头的 HTTP 4xx-5xx 响应?

错误:从上游 [uWSGI/Django/NGINX] 读取响应标头时,上游过早关闭连接