Задать вопрос

Confirm Form Resubmission после POST-запроса в Google Chrome

Как известно, после POST-формы желательно сделать редирект для защиты от повторной отправки данных.
Вот только в хроме (версии 25 и 26) это почему-то не работает, странно что раньше я такого не наблюдал, видимо сломали недавно, или я хз…

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    //setcookie('post', 1, time()+604800);
    header('Location: '.$_SERVER['REQUEST_URI'], true, 301);
}
//elseif (isset($_COOKIE['post'])) {
//    setcookie('post', '', time()-604800);
//    header('Location: '.$_SERVER['REQUEST_URI'], true, 303);
//}
?>
<form name="form" id="form" method="post" action="<?=$_SERVER['REQUEST_URI']?>">
<input type="submit" id="submit" name="submit" value="Submit" />
</form>

При обновлении страницы он всё-равно пытается отправить POST, даже если сделать второй редирект (то что закомменчено).

В других браузерах всё чётко (FF, Opera, IE8-9)

UPD нашёл подробности тут, бага только с последней версии:
code.google.com/p/chromium/issues/detail?id=177855
  • Вопрос задан
  • 4499 просмотров
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@egorinsk
Прежде чем обвинять Хром в «неправильном» поведении, стоит посмотреть в RFC, а как должны себя вести браузеры в такой ситуации:

www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.2

> Note: When automatically redirecting a POST request after receiving a 301 status code, some existing HTTP/1.0 user agents will erroneously change it into a GET request.

Полчуается, такое поведение соответствует стандарту HTTP. Неудивительно, ведь Хром разрабатывают (в отличие от конкурирующих браузеров) лучшие в мире программисты.
Ответ написан
hell0w0rd
@hell0w0rd
Просто разработчик
Странно, действительно не работает. Правда вполне нормально работают редиректы на страницы, отличные от той, на которую отправлена форма
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы