// Перенесено из темы Многоуровневая система... // Горбунов. //--- Я об этом начал догадываться когда после отправки сообщения в мою одну мою гостевую (одну из первых что я написал, в 2004-м году) оно удваивалось если нажать "refresh" Позднее я узнал что в HTTP протоколе явно прописано что пост-запрос не должен выводить данных а только делать редирект... Последней каплей было изучение разных глюков разных движков и с каждым днём во мне всё сильнее и сильнее что-то просыпается и каждый раз бормочит что надо:
Это очень спорное утверждение, лично я объединяю в элементарном модуле как GET так и POST опереации непосредственно связанные друг с другом. Это очень удобно, т.к. генератор форм и обработчик данных находятся рядом. Можно увидеть где это прописано? Ссылочку на конкретный раздел мануала бы посмотреть.
Vladson, Я просил вас указать мне конкретный раздел, а точнее привести конкретную цитату из спецификации, где это сказано, т.к. мой английский не достаточно хорош, чтобы найти её самому. У вас есть вторая попытка.
Не понял, я имею в виду не использование разными файлами POST и GET переменных, а разруливание разными модулями скрипта POST и GET "HTTP-запросов" Я приводил, но потом убрал из сообщения потому что заподозрил что вы ответите и попросите перевести. Лучше перескажу своими словами "В ответ на POST запросы сервер должен послать один из двух HTTP ответов" а в описании этих "ответов" сказано что после них должен следовать заголовок "Location" который (что у казано в уже его описании) служит исключительно для "редиректа" и не выводит никаких данных... DarkElf Полностью с тобой согласен, цель должна оправдывать средства, и это касается ВСЕГО ЧТО ЕСТЬ В ЭТОМ МИРЕ (и программирования в частности) писать движки сайта на ассемблере или писать драйвера видиокарт на JavaScript это не самый лучший выход
Vladson, когда вы делаете перевод, не стесняйтесь оригинальных цитат, иначе это выглядит странно, и позволяет заподозрить вас в некрасивых вещах (искажение сути написанного). Я вот ну никак не могу найти ничего похожего, на ваш перевод. Даже возникает впечатление, что ваш английских даже хуже чем мой.
Горбунов Олег, спасибо, жду. Vladson, ненадо перегибать палку, я в ваш адрес мог бы сказать тоже самое. Вы привели эти данные как аргумент, имею ли я право узнать чем подкреплён ваш аргумент? Тему топика я ещё не забыл, просто ваш аргумент коренным образом противоречит моему подходу к созданию модулей. Мой подход к созданию модулей заключается в том, что редирект делает лиш при создании новой сущности. При редактировании существующей сущности я вывожу сообщение о соврешённом действии и форму для возможного дополнительного редактирования. Рефреш в данном случае приведёт к повторному редактированию, что не может пивести к ошибкам бизнеслогики приложения. Добавлю, что в качестве защиты от рефреша редирект не катит, для этого я использую одноразовые идентификаторы передаваемые в скрытых полях форм.
Вольный перевод: ... Действие, выполняемое методом POST может не иметь ресурса, уникально идентифицируемого URI. В этом случае, кодом ответа может быть 200 (ОК) или 204 (No Content), в зависимости от того, возвращает ли запрос необходимое содержимое. ... Ответ за запрос может находиться по другому URI, и МОЖЕТ быть получен методом GET к этому ресурсу. Основное назначение этого метода для осуществления вывода данных после POST-запущеного скрипта перенаправлением браузера пользователя по новому адресу. ... Новый URI МОЖЕТ быть задан заголовком Location в ответе. ... Извиняюсь на несколько корявый перевод, на скорую руку был сделан. :shy:
Горбунов Олег, перевод правильный, вполне совпадает с тем что понял я. Теперь идём в раздел описания заголовка 200 OK В моём переводе это будет звучать так: Запрос успешно обработан. Информация возвращаемая с ответом зависит от метода запроса, к примеру: GET - В качестве ответа отправляется сущность соответствующая запрошенному ресурсу. HEAD - В качестве ответа отправляются HTTP заголовки соответствующие запросу без какого либо тела HTTP пакета POST - В качестве ответа отправляется сущность описывающая или содержащая результаты выполнения запроса. Как видим в качестве ответа на POST запрос можно отправлять всё что угодно, картинку, HTML страница, .pdf файл, и тд и тп.
ONK, аа! я и не спорил, что может. И Vladson тоже. Утверждалось лишь, — т.е. это МОЖНО делать. Точнее, желательно, для того что бы избежать повторной отправки данных через POST при обновлении страницы, посылать Location для перехода.
а разьве многоуважаемые присутствующие не делают редирект после POST? я так всегда делаю... header('location: ./'); // к примеру.
При редактировании некой сущности я обычно не делаю редиректа. При создании новой сущности обычно делаю, но есть исключения, иногда после создания новой сущности надо сразу перейти к редактированию её свойств.
Наглядный пример - предварительный просмотр у этого форума. Здесь редирект только бы усложнил задачу.
здесь затык с отправкой писем и не более того. если бы письма отправлялись как-ить хроном, то редирект был бы самое то.
Если бы был редирект, то для предварительного просмотра нужно было бы это сообщение куда-то сохранять. А так текст берется из POST.
можно заносить в базу с флагом (просмотр) и когда уже все выствлять флаг (готово). и редирект тут в самый раз
а зачем в базе неподтвержденный к публикации вариант? какашек в ней мало? предварительный просмотр - это настолько редкий вариант развития событий по POST (мной во всяком случае), что именно для него действительно можно обойтись и без редиректа... во всех других случаях я лично после POST предпочитаю location.
При создании сообщений редирект действительно нужен. Хотя лично я, в случае подключения к сообщению файлов или создания в теме опроса, сразу, без редиректа, генерирую соответствующую форму.