我有一个 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/