2016-08-13 2 views
0

Возможно ли сформировать заголовки ответов и отправить их обратно клиенту без тела?Как отправить ответные заголовки перед телом ответа в Rails

send_headers 
do stuff 
render body 
+0

Почему? Это не часто встречается в HTTP в целом. –

+0

У меня длинный запрос, а облачный тайм-аут - через 30 секунд. Cloudfront будет тайм-аут, если сервер не отвечает. –

+1

Затем вам следует сосредоточиться на исправлении или недопущении вашего длинного запроса. Это звучит как проблема [xy] (http://meta.stackexchange.com/a/66378/284887) мне .... – spickermann

ответ

0

Нет, вы не можете отвечать заголовками клиенту, выполнять операцию, а затем отвечать телом. (Я не уверен, что это то, что вы просите)

Если вы хотите ответить клиенту, а затем выполнить некоторую операцию, вы можете использовать фоновый процессор, например Sidekiq, для выполнения логики после ответа пользователю но вы не сможете снова реагировать на тело.

0

Чтобы ответить на этот вопрос напрямую, заголовки являются часть ответа, так что если вы не посылали HEAD request, который будет возвращать только заголовки, вы застряли в ожидании весь ответ, чтобы вернуться.

Чтобы ответить на вопрос о длительных таймаутах, существует общий шаблон, используемый для обработки длинных запросов, который включает в себя опрос соединений и код ответа 202 Accepted.

Вы должны спроектировать решение оконечной точки, которое отправляет 202 принятый ответ сразу и устанавливает цепь обработки в движении. При этом вы можете создать ресурс, который может дать полезную оценку того, сколько времени займет запрос, и где будет результат, и отправить его в тело ответа.

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

Смежные вопросы