我收到“(未知 url)的 Http 失败响应:0 未知错误”而不是 Angular 中的实际错误消息

新手上路,请多包涵

我正在使用 Angular 4 HttpClient 向外部服务发送请求。这是一个非常标准的设置:

 this.httpClient.get(url).subscribe(response => {
  //do something with response
}, err => {
  console.log(err.message);
}, () => {
  console.log('completed');
}

问题是,当请求失败时,我在控制台中看到一条通用的 Http failure response for (unknown url): 0 Unknown Error 消息。同时,当我在 chrome 中检查失败的请求时,我可以看到响应状态为 422,并且在“预览”选项卡中,我看到了描述失败原因的实际消息。

如何访问我可以在 chrome 开发工具中看到的实际响应消息?

这是演示问题的屏幕截图: 在此处输入图像描述

原文由 grdl 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

该问题与 CORS 有关。我注意到 Chrome 控制台中还有另一个错误:

请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问源“ http://localhost:4200 ”。响应的 HTTP 状态代码为 422。`

这意味着来自后端服务器的响应缺少 Access-Control-Allow-Origin 标头,即使后端 nginx 已配置为使用 add_header 指令 将这些标头添加到响应中。

但是,此指令仅在响应代码为 20X 或 30X 时添加标头。在错误响应中,标头丢失。我需要使用 always 参数来确保无论响应代码如何都添加了标头:

add_header 'Access-Control-Allow-Origin' 'http://localhost:4200' always;

正确配置后端后,我可以访问 Angular 代码中的实际错误消息。

原文由 grdl 发布,翻译遵循 CC BY-SA 3.0 许可协议

让我们做一些简单的:

a) 网络断开 - 零字节响应。

b)当我取消 http 调用时,我得到了这个(是的,你可以这样做)

c)在启动过程中,当我移动页面太快时,它会取消 http 调用,因为 angular 没有正确连接。我锁定了页面以阻止这一事件的发生。

d) 我们中间有一个代理,它在 30 秒后终止连接,而不是发送一个 HTTP 超时数据包。如果您查看后端的 .net 日志,您将看到客户端断开连接的消息。 (这些并不罕见,因为用户可能只是关闭了他们的浏览器)

所有这些都发生在我身上,我不知道如何区分导致任何特定故障的原因。

原文由 KenF 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进