Допустим, я нахожусь на/странице? ID = 1после редиректа-получить (PRG) вновь вставляет одну страницу в историю в Webkit браузеров
Затем я перейти к/странице? ID = 2
И я вношу изменения на эту страницу, которая реализует сообщение, а затем перенаправляет обратно на/page? Id = 2
В Firefox я могу нажать кнопку «назад» один раз и вернуться к/page? Id = 1, но в Chrome и Safari на iPhone мне нужно дважды нажать кнопку «Назад», потому что/page? id = 2 в истории браузера дважды. (И если я сделал несколько сообщений с id = 2, мне пришлось бы нажимать кнопку «Назад», чтобы многократно вернуться к id = 1.)
В некотором роде это похоже на обычное поведение браузера, так как каждый GET просто вставляется в историю, но поскольку URL-адрес идентичен предыдущей записи, это приводит к плохому пользовательскому опыту, чего обычно избегают другие веб-приложения ... и, естественно, его можно избежать в Firefox. Является ли это неизбежной ошибкой в браузерах Webkit, или я могу реализовать PRG по-другому, чтобы этого избежать?
btw- поведение по-видимому, тот же перенаправление с 302 или 303.
UPDATE: Я издевался некоторый пример кода ... не знает, если есть платформа, как jsfiddle где Я мог бы загрузить это для вас, чтобы увидеть в действии:
form.php:
id=<?=$_REQUEST['id']?>
<form action="submit.php" method="post">
<input type="hidden" name="id" value="<?=$_REQUEST['id']?>">
<input type="submit" value="submit">
</form>
submit.php:
<?php
header("Location: form.php?id=" . $_REQUEST['id']);
die($_REQUEST['id']);
?>
Если я начинаю с form.php? Id = 4 (просто чтобы поместить его в историю браузера), а затем перейдите к form.php? Id = 5, а затем нажмите submit (как будто для выполнения изменения базы данных) в Firefox я получаю одну запись в истории для каждого; в Chrome я получаю одну запись для id = 4, а затем две записи для id = 5. Почему разница в поведении? Я думаю, что поведение Firefox лучше, так как двойное нажатие, чтобы уйти от id = 5, является интуитивно понятным для пользователя.
спасибо. Я вижу, как это работает, но ничего себе, довольно окольный подход, требующий iframes, javascript и т. Д. Для простой подачи формы (и надеясь, что браузер не загрязнит ее историю из-за iframe). Я все еще надеюсь, что кто-то может обратиться к основной механике поведения истории браузера во время стандартного PRG в Webkit и посмотреть, есть ли более прямое исправление для его решения. – dlo
Спасибо за хороший комментарий. И да, было бы неплохо получить реальное объяснение того, как работает механика. –
Да, я однажды испорчен, когда задал вопрос об Firefox, и кто-то, кто на самом деле находится в команде разработчиков Firefox, ответил. :) – dlo