我有一个角度应用程序,它每 5 秒查询一次节点/快递后端端点。但是,有时我会收到一个 cors 错误。
用例
- 用户创建交易。事务以“待处理”状态添加到数据库
- 前端会定期查询数据库,直到状态更新为“已完成”。所以它可以检索结果。
角
每 5 秒我做一个 http 获取请求
const url = 'https://<removed>.com/api/v1/transactions/' + transactionId;
interval(5000)
.pipe(
switchMap(() => this.httpClient.get(url)),
tap((response: any) => {
this.summary = response;
}),
takeWhile((response: any) => response.data['status'] !== 'Completed'),
).subscribe();
}
第一个请求很好,然后我在下一个请求时收到以下错误。
无法加载 https://"".com/api/v1/transactions/f3debad2-a830-4168-9a03-475389dae7e0:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问源“ http://localhost:4200 ”。响应具有 HTTP 状态代码 502。
跨域读取阻止 (CORB) 阻止了具有 MIME 类型 text/html 的跨域响应 https://"".com/api/v1/transactions/f3debad2-a830-4168-9a03-475389dae7e0。有关详细信息,请参阅 https://www.chromestatus.com/feature/5629709824032768 。
同样,这种情况有时只会发生,有时我可以通过 200 个响应发出尽可能多的请求。
节点
我在后端设置了 CORS。
app.use(cors());
笔记
我不确定它是否是一个完整的服务器端问题。这是一个随机的边缘情况。我的所有其他 API 请求(包括 POST 请求)都可以正常工作。
事实上,在它开始间隔 5 秒检查结果是否准备好之前,它会发布到同一域上的端点,没有问题。
我已经完成了 10 个测试用例,每个测试将查询端点 3-4 次(通常在结果准备好/完成之前需要很长时间)。所有 10 个测试用例都可以,然后第 11 个可能有这个问题。