Как реализовать «квитанцию о доставке» для http-запросов

#http #request #response #httpresponse

#http #запрос #ответ #httpresponse

Вопрос:

Есть ли способ реализовать «квитанцию о доставке» или «быстрый ответ» с сервера перед началом длительного процесса (который задержит фактическое содержимое ответа)?
Я имею в виду это:

 request -> server receives -> res.send(200) ((but keep this 'res' alive!)) -> server long running process -> res.send("actual response")
  

Это было бы очень полезно на стороне приложения, поэтому я узнаю, что тайм-ауты действительно происходят из-за процесса, а не потому, что сервер отключен. Кроме того, я хотел избежать выполнения двух запросов, один за другим.

Ответ №1:

Для этой цели можно использовать код состояния HTTP 100 CONTINUE. Смотрите https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.1.1

Согласно RFC, 100 Continue — это промежуточный ответ, за которым должен последовать окончательный ответ после завершения запроса.

Комментарии:

1. Но это просто соглашение? Или мы внедрили ресурсы, которые справляются с такого рода функциями? Я имею в виду, должен ли я сделать запрос, получить статус 100, а затем сделать еще один запрос для фактического содержимого?

2. Нет, поток будет «запрос клиента с Expect: 100-continue заголовком без тела запроса» — «ответ сервера 100 Continue » — «клиент отправляет тело» — «сервер обрабатывает тело» — «сервер отправляет ответ 200 OK / 500 Internal serve error соответственно». Вся передача происходит в рамках одного и того же HTTP-соединения. Таким образом, клиент получит два ответа от сервера в рамках одного и того же соединения.