2010-01-03 3 views
5

ли это плохая практика, чтобы выдать следующий запрос POST:HTTP GET и POST параметры рекомендация

/test?a=1&b=2 
POST data: c=3&d=4 

Обратите внимание, что 2 параметра является частью URL и 2 параметра является частью содержимого POST.

На другой ноте, является следующее правило по-прежнему рекомендуется: запрос

  • GET: извлекать содержимое из сервера, но ничего на сервере не изменится.
  • запрос POST: размещать содержимое на сервер, который может изменения данных на сервере

Я спрашиваю, потому что я вижу немного все в Интернете.

Laurent Luce

+1

Да, люди по-прежнему считаю, вы должны использовать '' s столба для всего, что может изменить данные, но * я * до сих пор считаю, что это нагрузка кр ап. Это заставляет вас делать действительно тяжелые вещи, когда все, что вам нужно, это простая ссылка Удалить. Я думаю, что до тех пор, пока у вас есть надлежащие проверки на месте на стороне сервера, чтобы веб-браузеры не закручивали ваш сайт и т. Д., Это не имеет большого значения. – mpen

+1

Кроме того, смешивание методов параметров в порядке, но я не знаю, почему вы это сделали. С точки зрения программирования, имеет смысл быть последовательным. Единственное исключение, о котором я могу думать, - это форма входа в систему, иногда вы хотите перенаправить на страницу входа в систему, а затем вы передаете ссылку redirect_back_to_this_page в GET, и нет много точечного копирования, которое возвращается в форму. – mpen

ответ

6

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

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

Я бы рекомендовал чтение Wikipedia entry on HTTP protocol:

GET

Requests представление указанного ресурса. Обратите внимание, что GET не следует использовать для операций, которые вызывают побочные эффекты, например, для использования в веб-приложениях. Одна из причин этого заключается в том, что GET может использоваться произвольно роботами или искателями, которые не должны учитывать побочные эффекты, которые должен вызвать запрос. См. Безопасные методы ниже.

ПОСТ

представляет данные, подлежащие обработке (например, из HTML формы) с идентифицированным ресурса. Данные включены в тело запроса. Это может привести к созданию нового ресурса или обновлений существующих ресурсов или того и другого.

Есть и другие операции (например, HEAD, PUT, DELETE), и вы должны использовать их, если вы разрабатываете API. Они широко обсуждаются в дизайне API RESTful.

1

Там нет ничего плохого. Причина изменения данных должна быть отправлена ​​в POST, это значит, что вы не будете изменять данные повторно, если пользователь нажал кнопку «Обновить». В этом случае будет отправлена ​​только информация GET.

+1

Если человек обращается к обновлению, а последней операцией был POST (как в этом запросе), он все же скорее всего повторит операцию post. Если сервер не перенаправляет на операцию GET. – notnoop

+1

он, вероятно, имел в виду закладки/индексирование поисковыми системами. Вы действительно не хотите индексировать запросы на изменение данных ... –

3

Это правило, безусловно, по-прежнему рекомендуется.

Это отражено в обновлении поведения современных браузеров. Они будут радостно обновляться с помощью значений GET, но появится диалоговое окно с предупреждением об обновлении POST («вы уверены, что хотите повторно отправить?» И т. Д.).

Похоже, вы пытались совместить два метода (GET и POST).путем POSTing к URL с значениями GET. Хотя это должно работать нормально, это обычно не делается. Формы обычно используют исключительно один или другой.

2

Да, следует соблюдать семантику GET и POST.

Учитывая тот факт, то есть часто очень хорошая причина для ввода некоторых параметров в GET, а некоторые в POST Варс - рассмотрим случай, когда у вас есть веб-скрипт, который делает что-то вроде:

UPDATE datatable SET quantity=30 WHERE order=21559 

Это может быть представлена ​​в виде:

/update?order=21559 
POST data: quantity=30 

C.