首页 > 解决方案 > 504 从服务器读取响应时超时

问题描述

我有一个 Angular 前端和一个 .NET CORE 后端。我有一个非常繁重的特定请求,需要一段时间才能执行。当我查看浏览器控制台时,我得到一个 504:从服务器读取响应时超时。

后端完成请求,我可以在日志中看到它在一段时间后返回一些 JSON(在我超时后的某个地方)。

首先,我尝试向角度请求添加超时标头,如下所示:

    const options = { headers: new HttpHeaders({ timeout: `${10000}` }) };

这没有用。

我还尝试在我的 rxjs 管道中添加该函数。

 this.service.getData(this.id, this.codeSystem, this.code)
    .pipe(
      timeout(120000),
      map(data=> {
       this.data = data;
      }),
      takeWhile(() => this.componentActive),
      catchError(error => {
        console.log(error);
      }))
    .subscribe();

之后我尝试在 IIS 的高级设置下增加连接超时,这也不起作用。

在这一点上,我不确定问题出在哪里或如何解决。有人有想法/建议吗?

标签: angularhttp-status-code-504

解决方案


问题出在服务器上。您无法从浏览器中执行任何操作。如果服务器在时间限制内没有发送响应,大多数浏览器会自行断开连接,出于安全原因,我们无法从 JavaScript 更改此设置。服务器必须发送部分正文内容以响应继续连接的请求。只要服务器很忙,它就必须发送一些东西来保持连接。

如果您有一个需要很长时间才能完成的 API,并且您看到因此断开连接,那么您应该放弃期望获得 JSON 响应。

联系 API 的作者,并请他们修复他们的服务器。

提出需要很长时间才能完成的请求时。最佳实践是POST启动服务,服务器以任务 ID响应。然后,您会定期GET更新该任务 ID的状态,直到任务ID的状态报告所发生的情况。然后,您可以请求服务器向客户端发送任务的输出

同时,发出请求并忽略错误。您无法从浏览器解决此问题。


推荐阅读