我有一个 Flask REST 服务,其中一个 POST 操作可能需要很长时间(例如三十秒)才能返回 HTTP 204 无内容。
该服务托管在两台服务器上作为故障转移,由 Nginx 决定应该使用哪个服务器,Nginx 配置为:
upstream demo-failover {
server http-demo-primary.example.com weight=1000 max_fails=0;
server http-demo-failover.example.com backup;
}
server {
server_name demo.example.com;
proxy_next_upstream error timeout invalid_header;
proxy_connect_timeout 2;
proxy_redirect off;
proxy_read_timeout 240s;
}
当做相关的 POST 请求时,Nginx 将它发送到 http-demo-primary
,由于它在两秒内没有收到任何响应,因此放弃并向 发送另一个请求http-演示-故障转移
。显然,这是不合适的:由于第一台机器已启动并正在运行,Nginx 不应故障转移到第二台机器。
我认为从服务发送 header (实际上任何 header 都可以)就足以让 Nginx 了解机器处于事件状态并且它不应该故障转移到另一台机器。
我知道如何在 PHP 和 ASP.NET 中执行此操作。另一方面,我能在 Flask 中找到的唯一类似的东西是 Streaming Contents官方文档的部分,这在我的情况下似乎不合适,其中响应是 HTTP 204。
在服务器返回的实体主体为空的上下文中,我应该如何刷新一些 header ?
最佳答案
长时间运行 HTTP 请求通常不是一个好主意。相反,请考虑快速返回 HTTP 202 Accepted
响应,然后异步执行长时间运行的处理。如果客户端需要知道请求何时完成,您可以返回一个带有 URL 的 Location
header ,客户端可以通过该 URL 轮询任务状态。
关于python - 如何在发送 HTTP 204 之前刷新 Flask 中的 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28771361/