angular - 504 从服务器读取响应超时

标签 angular http-status-code-504

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

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

首先,我尝试向 Angular 请求添加超时 header ,如下所示:

    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 的高级设置下增加连接超时,但这也不起作用。

目前我不确定问题出在哪里或如何解决。有人有想法/建议吗?

最佳答案

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

如果您的 API 需要很长时间才能完成,并且结果导致断开,那么您应该放弃获取 JSON 响应的期望。

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

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

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

关于angular - 504 从服务器读取响应超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56547035/

相关文章:

angular - 在 Angular 中,类型 "Property ' 上不存在获取 'MediaDevices' getDisplayMedia'

Angular 2 rc5,服务单元测试问题

java - 如何添加修复以避免 504 网关超时错误

angular - 如何将输入数据值发送到 angular-2 中的自定义指令?

angular - 如何使用 lambda 函数访问 Get 请求的内容

angular - 使用 NgFor 在 angular2 中生成子组件不起作用

Spring Boot - 请求超时 504

Python Tika 无法读取 PDF - 无法下载 Tika Server

django - 使用Django提供静态文件时,HTTP 504网关超时(Nginx + Gunicorn)