#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-соединения. Таким образом, клиент получит два ответа от сервера в рамках одного и того же соединения.