Отвечая так, браузер ничего не делает - это возможно? - PullRequest
4 голосов
/ 17 марта 2009

Можно ли сделать такой HTTP-ответ, чтобы браузер его игнорировал и продолжал показывать ранее отображенную страницу?

Я имею в виду следующий сценарий:

а) пользователь что-то щелкает

б) некоторые POST отправляются на сервер (или GET, но давайте придерживаться POST как более интересного)

c) сервер решает, что по какой-то причине он не хочет отправлять ответ в это время

d) сервер отправляет специально созданный ответ

e) браузер не показывает страницу с ошибкой, не показывает пустую страницу, нигде не перенаправляет, не перезагружает - просто продолжает показывать то, что показывал, как будто пользователь никогда не отправлял форму

PS Конечно, его можно обернуть AJAX, но я спрашиваю, возможно ли решение без поддержки JavaScript без поддержки JavaScript

Ответы [ 5 ]

12 голосов
/ 17 марта 2009

Попробуйте вернуть HTTP 204 Нет содержимого. См. Описание этого кода ответа в RFC 2616 (протокол передачи гипертекста - HTTP / 1.1) , где написано:

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

1 голос
/ 17 марта 2009

Предположим, вы делаете это.

Что делает пользователь? Конечно, отправьте форму еще раз.

Несколько раз.

Затем они решают, что ваш сайт не работает, и уходят.

1 голос
/ 17 марта 2009

Этот метод обычно называется AJAX . Для этого требуется Javascript и XMLHttpRequest .

Редактировать: заметил ваш «PS» внизу. Ответ 204 , предложенный в другом ответе, выглядит так, как будто это может быть допустимым решением, отличным от Javascript.

0 голосов
/ 17 марта 2009

Я думаю, что для этого вам нужен Javascript, вы можете отправить запрос, и в зависимости от ответа сервера Javascript может сделать false, избегая обновления / перезагрузки реальной страницы.

Я не знаю об ответе 204, но, возможно, вы сможете сделать это со стороны сервера.

Другой способ сделать это (также Javascript) - сделать возврат false, сразу после отправки запроса, и в зависимости от ответа сервера (с помощью ajax) вы можете изменить фактическую страницу или отправить пользователя на другую страницу.

0 голосов
/ 17 марта 2009

Нет. Протокол HTTP состоит из цикла запрос-ответ. Сервер не может решить НЕ отвечать (может, но затем он нарушает протокол и совершает ошибку).

...