Отвечать так, чтобы браузер ничего не делал - возможно ли это?

StackOverflow https://stackoverflow.com/questions/654636

  •  19-08-2019
  •  | 
  •  

Вопрос

Можно ли сделать такой 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 состоит из цикла запрос-ответ.Сервер не может решить НЕ отвечать (может, но тогда он нарушает протокол и совершает ошибку).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top