angular - 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 的高级设置下增加连接超时,这也不起作用。
在这一点上,我不确定问题出在哪里或如何解决。有人有想法/建议吗?
解决方案
问题出在服务器上。您无法从浏览器中执行任何操作。如果服务器在时间限制内没有发送响应,大多数浏览器会自行断开连接,出于安全原因,我们无法从 JavaScript 更改此设置。服务器必须发送部分正文内容以响应继续连接的请求。只要服务器很忙,它就必须发送一些东西来保持连接。
如果您有一个需要很长时间才能完成的 API,并且您看到因此断开连接,那么您应该放弃期望获得 JSON 响应。
联系 API 的作者,并请他们修复他们的服务器。
提出需要很长时间才能完成的请求时。最佳实践是POST
启动服务,服务器以任务 ID响应。然后,您会定期GET
更新该任务 ID的状态,直到任务ID的状态报告所发生的情况。然后,您可以请求服务器向客户端发送任务的输出。
同时,发出请求并忽略错误。您无法从浏览器解决此问题。
推荐阅读
- git - 将删除和添加的文件夹更正为历史上很久以前发生的重命名
- javascript - 如何在 sequelize 中对嵌套属性进行分组?
- javascript - 正则表达式从字符串获取对象参数并从 JSON/Js 对象获取这些参数的值
- python - TypeError:不支持的操作数类型/:'Image'和'int'
- tomcat - Jenkins无法连接到节点,没有找到已知的主机文件
- php - 迁移时将 Laravel MYSQL 更改为 utf8mb4
- c# - C# FTP上传文件夹内多个文件的文件优先级
- javascript - 如何使用 TypeScript 对数组对象进行递归分组?
- mysql - 具有多个查询的NodeJS mysql连接池
- swift - 查找符合协议的所有类型