Отвечать так, чтобы браузер ничего не делал - возможно ли это?
Вопрос
Можно ли сделать такой HTTP-ответ, чтобы браузер его игнорировал и продолжал показывать ранее отображаемую страницу?
Я имею в виду следующий сценарий:
а) пользователь нажимает что-то
б) на сервер идет некоторый POST (или GET, но давайте остановимся на POST, как интереснее)
в) сервер решает, что по какой-то причине он не хочет отправлять ответ в данный момент
г) сервер отправляет специально созданный ответ
д) браузер не показывает страницу с ошибкой, не показывает пустую страницу, никуда не перенаправляется, не перезагружается - просто продолжает показывать то, что показывал, как будто пользователь никогда не отправлял форму
PS Конечно, его можно обернуть AJAX, но я спрашиваю, возможно ли простое решение без Javascript.
Решение
Попробуйте вернуть HTTP 204 No Content. См. Описание этого кода ответа в RFC 2616 (протокол передачи гипертекста - - HTTP / 1.1) где написано:
Если клиент является агентом пользователя, он НЕ ДОЛЖЕН изменять свой вид документа что вызвало отправку запроса. Этот ответ в первую очередь предназначен для ввод для действий, которые должны быть выполнены без изменения активности агента пользователя просмотр документа, хотя любая новая или обновленная метаинформация ДОЛЖНА применяться к документ в настоящее время в активном представлении агента пользователя. Р>
Другие советы
Этот метод обычно называется AJAX . Для этого требуется Javascript и функция XMLHttpRequest .
Изменить: заметил ваш «PS» в нижней части. 204 ответа , предложенный в другом ответе, выглядит как допустимый не Javascript решение.
Предположим, вы делаете это.
Что делает пользователь? Разумеется, отправьте форму еще раз.
Несколько раз.
Затем они решают, что ваш сайт не работает, и уходят.
Я думаю, что для этого вам нужен Javascript, вы можете отправить запрос, и в зависимости от ответа сервера Javascript может сделать false, избегая обновления / перезагрузки реальной страницы.
Я не знаю об ответе 204, но, возможно, вы сможете сделать это со стороны сервера.
Другой способ сделать это (также Javascript) - вернуть false, сразу после отправки запроса, и в зависимости от ответа сервера (с помощью ajax) вы можете изменить фактическую страницу или отправить пользователя на другую страницу. р>
Нет.Протокол HTTP состоит из цикла запрос-ответ.Сервер не может решить НЕ отвечать (может, но тогда он нарушает протокол и совершает ошибку).