python - 如何在发送 HTTP 204 之前刷新 Flask 中的 header ?

标签 python flask http-headers flush

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

相关文章:

python - Flask autoreload 不重新加载或拾取更改

python - 使用 --preload 在 gunicorn 中的 worker 之间共享内存

HTTP header : What is the difference between X-FORWARDED-FOR, X_FORWARDED_FOR 和 HTTP_X_FORWARDED_FOR?

.htaccess - 通过 htaccess 捕获 X-FORWARDED-FOR header ?

python - python中for循环中的两个变量

python - 从 Python 调用 AWS Rekognition HTTP API 的示例

python - 在标绘线上打印字符串(模拟等高线图标签)

python - Flask 应用程序与 opencv 一起工作真的很慢

javascript - Jquery 文件上传 - 在 IE9 中不发送标题

python - 识别文本中的双词城市 ('New York' )