Подтвердить что ты не робот

Смешивание GET с POST - это плохая практика?

Неправильно ли использовать GET и POST? (обратите внимание, что это в PHP)

например.

<form action="delete.php?l=en&r=homepage" method="post">
 <!-- post fields here -->
</form>
4b9b3361

Ответ 1

Собственно, это отправит запрос на запрос POST на сервер, так что технически вы не смешиваете их вместе: вы используете POST с параметрами url. В этом нет ничего принципиально неправильного, если вы не используете свой URL для параметров, которые должны быть в форме скрытого поля.

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

EDIT, спустя годы

Меня попросили указать источник, так что вот соответствующая часть самой спецификации HTTP

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

было установлено соглашение о том, что методы GET и HEAD НЕ ДОЛЖНЫ иметь значение принятия действий, кроме извлечения. Эти методы следует считать безопасными. Это позволяет агентам пользователя представлять другие методы, такие как POST, PUT и DELETE, особым образом, так что пользователь получает информацию о том, что возможно небезопасное действие запрашивается.

Там вы идете, GET ничего не должен менять, POST - это вещь, которая меняет сервер (небезопасная операция). Я должен иметь возможность называть GET любое количество времени. Это больше, чем идемпотент: он должен быть (насколько возможно) побочным эффектом! С GET запрос может даже не дойти до сервера, если задействовано кэширование.

Итак, да: у вас есть форма, вы хотите знать, используете ли вы GET или POST? Затем измените server = > POST, не измените server = > GET. А поскольку URL можно получить с помощью любых глаголов (получить или отправить), не помещайте данные, которые изменяют сервер в URL-адресе, потому что кто-то может скопировать этот URL-адрес, выполнить GET и изменить ваш сервер, не зная. Представьте, что произойдет, если кто-то скопирует этот URL на facebook и 10 000 человек начнет удалять случайные вещи? Нехорошо. Недавняя структура (node, ruby) лучше изолирована от этого, но не базового PHP, поэтому это хорошее эмпирическое правило для этого языка.

Ответ 2

Он все еще POST, вы просто включаете строку запроса в URL. Я не вижу проблемы с этим. Это, вероятно, более чистый, включая эти переменные в данных post, используя скрытые поля ввода. Кроме того, на сервере вы, вероятно, не хотите значения l (язык?) С вашими данными сообщения. Если он всегда находится в строке запроса, вы можете использовать тот же код в другом месте, чтобы определить язык, а не иметь специальный случай для запросов POST.

Ответ 3

Нет, это нормально. Я делаю именно это на своем веб-сайте компании, например, на странице администрирования пользователя. Обычный URL-адрес:

/admin/user?name=jkugelman

Затем, чтобы удалить пользователя, я отправляю его на эту же страницу, за исключением того, что вместо POST вместо переменной GET вместо POST вызывается переменная, так как удаление - это действие с состоянием и должно выполняться с помощью POST. Это выглядит примерно так:

<!-- Post back to self -->
<form action="/admin/user?name=jkugelman">
    <input type="submit" name="delete" value="Delete"
           onchange="return confirm('Are you sure?')" />
</form>