2015-02-27 1 views
3

У меня есть служба REST REST, в которой одно действие POST может занять много времени (например, тридцать секунд), прежде чем возвращать HTTP 204 No Content.Как очистить заголовки в колбе перед отправкой 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-demo-failover. Очевидно, это не подходит: поскольку первая машина запущена и работает, Nginx не должен отказываться от второй машины.

Я предполагаю, что отправка заголовков - фактически любой заголовок сделает трюк - из службы будет достаточно, чтобы Nginx понял, что машина активна и что она не должна переходить на другой.

Я знаю, как это сделать в PHP и ASP.NET. С другой стороны, единственная подобная вещь, которую я могу найти в Flask, - это Streaming Contents раздел официальной документации, который кажется мне неподобающим в моем случае, где ответ HTTP 204.

Как скрыть некоторые заголовки в контексте, где объект-тело, возвращаемое сервером, пуст?

ответ

0

Имея длительные HTTP-запросы, как правило, плохая идея. Вместо этого подумайте о том, чтобы быстро вернуть ответ HTTP 202 Accepted, а затем выполнить длительную обработку асинхронно. Если клиент должен знать, когда запрос был завершен, вы можете вернуть заголовок Location с URL-адресом, который клиент может опросить для статуса задачи.