Почему бы НЕ использовать метод POST здесь? - PullRequest
4 голосов
/ 09 июня 2010

У меня есть сайт объявлений.

На главной странице (указателе) у меня есть несколько полей формы, которые пользователь может заполнять или не заполнять для подробного поиска объявлений.

Ex:

   Category: Cars
   Price from: 3000
   Price to:   10000
   Color: Red
   Area: California

Действие форм установлено на странице php:

   <form action='query_sql.php' method='post'>

В query_sql.php я получаю переменные следующим образом:

   category=$_POST['category'];
   etc etc...

Затем запрос MySql:

   $query="SELECT........WHERE category='$category' etc etc....
   $results = mysql_query($query);

Затем я просто отображаю результаты запроса пользователю, создавая таблицу, которая заполняется динамически в зависимости от набора результатов.

Однако, согласно ответу полковника Шрапнеля в моем предыдущем вопросе, я не должен использовать POST здесь: Как скрыть URL от пользователей при отправке этой формы?

Причина, по которой я использую сообщение, заключается в том, чтобы просто скрыть длинный URL-адрес "одна страница-слово-документ" в адресной строке браузера.

Я очень смущен, можно ли использовать POST или нет?

Работает нормально, когда я использую GET или POST сейчас ... И это уже на рабочем сервере ...

Кстати, в связанном вопросе я не имел в виду сделать URL невидимым (или скрыть его), я просто хотел, чтобы он тоже выглядел лучше (чего я добился с помощью mod_rewrite).

UPDATE:

Если я использую GET, то как мне сделать URL лучше выглядящим (красивым)? Проверьте этот предыдущий вопрос:

Как заставить этот очень длинный URL выглядеть коротким?

Ответы [ 8 ]

12 голосов
/ 09 июня 2010
  • Поисковые системы не будут индексировать результаты
  • Люди не могут добавлять в закладки поиски
  • Люди не могут отправить ссылку на свой поиск своим друзьям
  • Люди не могут ссылаться на страницу результатов со своих собственных веб-страниц.
  • Некоторые люди не могут вернуться на страницу без получения страшного "Вы хотите повторно отправить форму?"

Если я использую GET, то как мне сделать URL-адрес лучше (красивее)?

Не стоит.Это не важноКоличество пользователей, которые заметят URL-адрес, на который отправлена ​​форма, крошечно, а число, которое заботится, еще меньше.

1 голос
/ 09 июня 2010

GET следует использовать для запросов, которые доступны только для чтения или не имеют побочных эффектов для данных (т. Е. Они должны быть идемпотентными , как указано в HTTP документация ).Вы должны иметь возможность отправлять запрос GET столько раз, сколько хотите, чтобы он не влиял на результаты, которые будут возвращены.(Вы, возможно, не всегда получаете один и тот же результат, поскольку, разумеется, за это время что-то еще могло измениться, но запрос GET не должен изменять сами данные).

Таким образом, поиск относится к этой категории, посколькуВы не должны изменять какие-либо данные в своей системе, которые будут влиять на вывод при поиске, вы просто предоставляете данные пользователю на основе некоторого параметра, который они вам дают.

Конечно, некоторые данные, которые вывсегда будет нуждаться в обновлении, например, в статистике (как упомянуто в комментариях), и это нормально для GET, так как это не повлияет на ответ, просто ведется запись всех сделанных запросов и т. д.

POST следует использовать, когда выполняется какое-либо разрушительное действие (под разрушительным, я имею в виду, когда данные изменяются, а не просто удаляются).Так что добавляйте, обновляйте, удаляйте и т. Д.

Вот почему браузер обычно запрашивает вас, если вы хотите повторно отправить запрос POST, но не для GET.Это потому, что POST предназначен для использования при изменении данных.

Кроме того, некоторые браузеры могут предварительно извлекать страницы из ссылок на вашей странице (чтобы попытаться создать иллюзию скорости, когда ссылкав итоге щелкнул).Если действие GET делает что-то разрушительное (например, удаление записи), это может быть непреднамеренно вызвано простым посещением страницы, на которой находится ссылка, например.

Если вы беспокоитесь о том, что ваши URL выглядят "грязно"msgstr "вы можете использовать что-то вроде mod_rewrite , чтобы сделать URL более удобными для человека.Например, "http://yoursite.com/search/cars/red" может отображаться на "http://yoursite.com/search.php?category=cars&color=red".

1 голос
/ 09 июня 2010

Вы, вероятно, захотите выполнить некоторую проверку пользовательских входных данных, чтобы смягчить атаки с использованием SQL-инъекций, поскольку похоже, что ввод непосредственно манипулирует оператором SQL

1 голос
/ 09 июня 2010

Идея использования GET поверх POST заключается в том, что при использовании GET у вас есть поисковый URL, который вы можете изменить в адресной строке, добавить в закладки и передать.

Технически, оба метода хороши и в основном взаимозаменяемы , если вам не нужно обращаться к этим аспектам, и передаете данные с одной страницы на следующую.

Одна большая разница между GET и POST заключается в том, что параметры GET не должны превышать 1-2 килобайта. Ограничение размера для запроса POST обычно составляет десятки мегабайт.

0 голосов
/ 09 июня 2010

Считаете ли вы:

Отправка формы через GET (или POST), затем чтение на стороне сервера содержимого формы (из URL-адреса или данных публикации), формирование симпатичного URL-адреса, затем 301-редирект на этот URL-адрес.

Таким образом, вы получаете полный контроль над URL-адресом (например, это не зависит от браузера / формы, как выглядит URL-адрес), и вы получаете все преимущества использования GET, например, закладка, ссылка, удобная кнопка возврата и т. д.

0 голосов
/ 09 июня 2010

Похоже, вы беспокоитесь о не дружественных URL-адресах, т. Е. Хотите, чтобы на вашем сайте / в приложении были удобные URL-адреса. Если это так, вы можете продолжать использовать POST в вашем сценарии, но выполнить перенаправление после POST. Делая перенаправление после публикации, перенаправленный URL, который отображает результаты вашего поиска, можно сделать дружелюбным и коротким, а вы можете использовать POST для передачи большего количества параметров в запросе на сервер и избежать длинной строки запроса, связанной с ПОЛУЧИТЬ URL.

Чтобы узнать больше о перенаправлении после публикации, прочитайте эту статью http://www.theserverside.com/news/1365146/Redirect-After-Post

0 голосов
/ 09 июня 2010

Ответ Дэвида Дорварда касается большинства моментов - однако большой вопрос, который он упускает, это проблема кеширования.

У POST и GET очень специфическая семантика - POST должен означать, что запрос изменяет данные в системе, в то время как GET не делает.Поэтому ответ на POST не должен кэшироваться.Но ответ на GET может быть кэширован (в зависимости от отправленных заголовков).

Примечание: содержимое не только кэшируется в браузере.

C.

0 голосов
/ 09 июня 2010

Прежде всего, не забудьте санировать ваш ввод, используя mysql_real_escape_string .GET против POST практически такой же, за исключением того, что:

  • С POST вы не можете добавить страницу в закладки
  • С GET вы не можете публиковать файлы, и для запроса существует ограничение длиныстрока

Я использую POST, только когда знаю, что страница изменит что-то на стороне сервера (например, обновление БД), а затем перенаправлю на другую страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...