2015-07-30 4 views
0

У меня есть букмарклет JavaScript, который передает информацию POST на сервер (с флэш-памятью), когда пользователь находится на другой странице (т. Е. Не на моем сервере). Я не хочу прерывать просмотр пользователей, захватив их сессию с ответом на сервер.Отправлять HTTP-ответ, который не меняет текущую страницу пользователя

Моя первоначальная мысль заключалась в том, что я мог каким-то образом подавить HTTP-ответ от Flask; не позволяйте ему отправлять что-либо клиенту, чтобы они не были таинственно перенаправлены. Я надеялся, что смогу сделать это, возможно, имея нулевой возврат из представления.

Я тогда подумал, что это может быть HTTP-ответ, который позволяет клиенту знать, что информация была успешно отправлена, но оставит клиента на их текущей странице. Предположим, что значение заголовка типа «Вот результат вашего запроса, но вы не должны изменять текущий дисплей»?

+0

ваш клиент будет ждать напрасно, почему ты сделал это? – njzk2

+0

Если вы каким-то образом вынудили Flask сделать это, браузер в конечном итоге отключится, когда ему надоело ждать ответа – IanAuld

+0

@ nzjk2 - это временное решение. Я использую букмарклет Javascript для получения информации на сервере. В этот момент браузер «клиент» находится на странице, которую я не контролирую.Не моя страница, и я не хочу прерывать просмотр пользователя, захватив его сеанс. Позже я ожидаю инкапсулировать эту операцию в подключаемый модуль. – user96

ответ

3

Чтобы ответить на ваш измененный вопрос, да, есть такой ответ. От RFC 2616-section 10:

10.2.5 204 Нет содержимого

Сервер выполнил запрос, но не нужно возвращать тело объекта, и, возможно, захотите вернуться обновленной метаинформации. Ответ МОЖЕТ включать новую или обновленную метаинформацию в виде сущностей-заголовков, которые, если они ДОЛЖНЫ быть связаны с запрошенным вариантом .

Если клиент является агентом пользователя, он НЕ СЛЕДУЕТ изменять вид документа от той, которая вызвала запрос, отправляемый. Этот ответ предназначен прежде всего для того, чтобы разрешить ввод для действий без , что вызвало изменение активного представления документа агента, хотя СЛЕДУЕТ применять любую новую или обновленную метаинформацию к документу , находящемуся в активном режиме пользовательского агента.

Ответ 204 НЕ ДОЛЖЕН включать тело сообщения, и поэтому всегда завершается первой пустой строкой после полей заголовка.

(добавлен смелый акцент)

Таким образом, из колбы вы можете сделать что-то вроде

@app.route('/') 
def index(): 
    return flask.Response("Foo bar baz"), 204 
+1

Dannnno - Это то, что я искал. После прочтения вашего ответа ясно, что я должен был пойти в документы RFC-2616 после повторного рассмотрения моего вопроса. Это устраняет мои проблемы с HTTP и Flask. Благодарю. – user96

1

Нет, это невозможно. Фляжка построена на Werkzeug, которая реализует спецификацию WSGI. Цикл WSGI требует отправки ответа на каждый запрос. Для отладки ответа потребуется контроль над TCP/IP-соединением на гораздо более низком уровне, даже HTTP. Это вне домена WSGI, поэтому вне домена Flask.

Вы можете вернуть код ошибки или пустое тело, но вы должны вернуть что-то.

return '' # empty body 
+0

Спасибо. Это в значительной степени то, что я ожидал. Если я не получу ответ мастера (манипулирование заголовками или некоторыми такими) через несколько дней, я приму этот ответ. – user96