За последние 24 часа нас посетили 63098 программистов и 1743 робота. Сейчас ищут 908 программистов ...

Нужен ли редирект после POST?

Тема в разделе "Прочие вопросы по PHP", создана пользователем Vladson, 20 дек 2006.

  1. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    // Перенесено из темы Многоуровневая система...
    // Горбунов.
    //---


    Я об этом начал догадываться когда после отправки сообщения в мою одну мою гостевую (одну из первых что я написал, в 2004-м году) оно удваивалось если нажать "refresh"

    Позднее я узнал что в HTTP протоколе явно прописано что пост-запрос не должен выводить данных а только делать редирект...

    Последней каплей было изучение разных глюков разных движков и с каждым днём во мне всё сильнее и сильнее что-то просыпается и каждый раз бормочит что надо:
     
  2. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    Это очень спорное утверждение, лично я объединяю в элементарном модуле как GET так и POST опереации непосредственно связанные друг с другом. Это очень удобно, т.к. генератор форм и обработчик данных находятся рядом.

    Можно увидеть где это прописано? Ссылочку на конкретный раздел мануала бы посмотреть.
     
  3. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
  4. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    Vladson, Я просил вас указать мне конкретный раздел, а точнее привести конкретную цитату из спецификации, где это сказано, т.к. мой английский не достаточно хорош, чтобы найти её самому. ;)

    У вас есть вторая попытка.
     
  5. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Не понял, я имею в виду не использование разными файлами POST и GET переменных, а разруливание разными модулями скрипта POST и GET "HTTP-запросов"
    Я приводил, но потом убрал из сообщения потому что заподозрил что вы ответите
    и попросите перевести.

    Лучше перескажу своими словами
    "В ответ на POST запросы сервер должен послать один из двух HTTP ответов"
    а в описании этих "ответов" сказано что после них должен следовать заголовок "Location" который (что у казано в уже его описании) служит исключительно для "редиректа" и не выводит никаких данных...

    DarkElf
    Полностью с тобой согласен, цель должна оправдывать средства, и это касается ВСЕГО ЧТО ЕСТЬ В ЭТОМ МИРЕ (и программирования в частности) писать движки сайта на ассемблере или писать драйвера видиокарт на JavaScript это не самый лучший выход :)
     
  6. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    Vladson, когда вы делаете перевод, не стесняйтесь оригинальных цитат, иначе это выглядит странно, и позволяет заподозрить вас в некрасивых вещах (искажение сути написанного).

    Я вот ну никак не могу найти ничего похожего, на ваш перевод. Даже возникает впечатление, что ваш английских даже хуже чем мой. ;)
     
  7. Anonymous

    Anonymous Guest

    ONK, подтвежу, что цитата была. Счас найду и переведу...
     
  8. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Так бы сразу и написали "Владсон ты ламер, и иди нафик"
     
  9. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    Горбунов Олег, спасибо, жду.

    Vladson, ненадо перегибать палку, я в ваш адрес мог бы сказать тоже самое. Вы привели эти данные как аргумент, имею ли я право узнать чем подкреплён ваш аргумент?

    Тему топика я ещё не забыл, просто ваш аргумент коренным образом противоречит моему подходу к созданию модулей.
    Мой подход к созданию модулей заключается в том, что редирект делает лиш при создании новой сущности. При редактировании существующей сущности я вывожу сообщение о соврешённом действии и форму для возможного дополнительного редактирования. Рефреш в данном случае приведёт к повторному редактированию, что не может пивести к ошибкам бизнеслогики приложения.

    Добавлю, что в качестве защиты от рефреша редирект не катит, для этого я использую одноразовые идентификаторы передаваемые в скрытых полях форм.
     
  10. Anonymous

    Anonymous Guest

    Вольный перевод:
    ...
    Действие, выполняемое методом POST может не иметь ресурса, уникально идентифицируемого URI. В этом случае, кодом ответа может быть 200 (ОК) или 204 (No Content), в зависимости от того, возвращает ли запрос необходимое содержимое.
    ...
    Ответ за запрос может находиться по другому URI, и МОЖЕТ быть получен методом GET к этому ресурсу. Основное назначение этого метода для осуществления вывода данных после POST-запущеного скрипта перенаправлением браузера пользователя по новому адресу.
    ...
    Новый URI МОЖЕТ быть задан заголовком Location в ответе.
    ...

    Извиняюсь на несколько корявый перевод, на скорую руку был сделан. :shy:
     
  11. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    Горбунов Олег, перевод правильный, вполне совпадает с тем что понял я.

    Теперь идём в раздел описания заголовка 200 OK
    В моём переводе это будет звучать так:

    Запрос успешно обработан. Информация возвращаемая с ответом зависит от метода запроса, к примеру:

    GET - В качестве ответа отправляется сущность соответствующая запрошенному ресурсу.
    HEAD - В качестве ответа отправляются HTTP заголовки соответствующие запросу без какого либо тела HTTP пакета
    POST - В качестве ответа отправляется сущность описывающая или содержащая результаты выполнения запроса.

    Как видим в качестве ответа на POST запрос можно отправлять всё что угодно, картинку, HTML страница, .pdf файл, и тд и тп.
     
  12. Anonymous

    Anonymous Guest

    ONK, аа! я и не спорил, что может. И Vladson тоже.
    Утверждалось лишь,
    — т.е. это МОЖНО делать. Точнее, желательно, для того что бы избежать повторной отправки данных через POST при обновлении страницы, посылать Location для перехода.
     
  13. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    а разьве многоуважаемые присутствующие не делают редирект после POST?
    я так всегда делаю...

    header('location: ./'); // к примеру.
     
  14. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    При редактировании некой сущности я обычно не делаю редиректа. При создании новой сущности обычно делаю, но есть исключения, иногда после создания новой сущности надо сразу перейти к редактированию её свойств.
     
  15. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    ее удалить!
    =)
     
  16. Mavir

    Mavir Guest

    Наглядный пример - предварительный просмотр у этого форума. Здесь редирект только бы усложнил задачу.
     
  17. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    здесь затык с отправкой писем и не более того. если бы письма отправлялись как-ить хроном, то редирект был бы самое то.
     
  18. Mavir

    Mavir Guest

    Если бы был редирект, то для предварительного просмотра нужно было бы это сообщение куда-то сохранять. А так текст берется из POST.
     
  19. Mavir

    Mavir Guest

    Могу ошибаться, кода я не смотрел. Но я бы сделал именно так предварительный просмотр.
     
  20. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    можно заносить в базу с флагом (просмотр) и когда уже все выствлять флаг (готово).

    и редирект тут в самый раз
     
  21. avm

    avm Активный пользователь

    С нами с:
    21 сен 2006
    Сообщения:
    597
    Симпатии:
    0
    Адрес:
    Москва
    а зачем в базе неподтвержденный к публикации вариант? какашек в ней мало?
    предварительный просмотр - это настолько редкий вариант развития событий по POST (мной во всяком случае), что именно для него действительно можно обойтись и без редиректа... во всех других случаях я лично после POST предпочитаю location.
     
  22. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    и немного пивка!

    ---

    тут не сопр. просто то-то хранит. кто-то ПОСТ держит.

    я храню.
     
  23. ONK

    ONK Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    281
    Симпатии:
    0
    Адрес:
    СПб
    При создании сообщений редирект действительно нужен. Хотя лично я, в случае подключения к сообщению файлов или создания в теме опроса, сразу, без редиректа, генерирую соответствующую форму.
     
  24. avm

    avm Активный пользователь

    С нами с:
    21 сен 2006
    Сообщения:
    597
    Симпатии:
    0
    Адрес:
    Москва
    я лучше водочки чуть-чуть...
     
  25. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Вот она, тяпница... :)