Возможно ли сформировать заголовки ответов и отправить их обратно клиенту без тела?Как отправить ответные заголовки перед телом ответа в Rails
send_headers
do stuff
render body
Возможно ли сформировать заголовки ответов и отправить их обратно клиенту без тела?Как отправить ответные заголовки перед телом ответа в Rails
send_headers
do stuff
render body
Нет, вы не можете отвечать заголовками клиенту, выполнять операцию, а затем отвечать телом. (Я не уверен, что это то, что вы просите)
Если вы хотите ответить клиенту, а затем выполнить некоторую операцию, вы можете использовать фоновый процессор, например Sidekiq, для выполнения логики после ответа пользователю но вы не сможете снова реагировать на тело.
Чтобы ответить на этот вопрос напрямую, заголовки являются часть ответа, так что если вы не посылали HEAD request, который будет возвращать только заголовки, вы застряли в ожидании весь ответ, чтобы вернуться.
Чтобы ответить на вопрос о длительных таймаутах, существует общий шаблон, используемый для обработки длинных запросов, который включает в себя опрос соединений и код ответа 202 Accepted.
Вы должны спроектировать решение оконечной точки, которое отправляет 202 принятый ответ сразу и устанавливает цепь обработки в движении. При этом вы можете создать ресурс, который может дать полезную оценку того, сколько времени займет запрос, и где будет результат, и отправить его в тело ответа.
Ваша конечная цель должна заключаться в том, чтобы выяснить, почему запрос занимает очень много времени, но если он в конечном итоге предназначен для долгой и трудной реакции либо из-за необходимости ввода-вывода или процессора, либо если это бизнес-требование , то использование 202 Accepted и настройка формы опроса соединений будет вашим лучшим вариантом.
Почему? Это не часто встречается в HTTP в целом. –
У меня длинный запрос, а облачный тайм-аут - через 30 секунд. Cloudfront будет тайм-аут, если сервер не отвечает. –
Затем вам следует сосредоточиться на исправлении или недопущении вашего длинного запроса. Это звучит как проблема [xy] (http://meta.stackexchange.com/a/66378/284887) мне .... – spickermann