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

В чем преимущества использования запроса GET по запросу POST?

Несколько из моих приложений ajax в прошлом использовали запрос GET, но теперь я начинаю использовать запрос POST. Запросы POST кажутся немного более безопасными и определенно более дружественными/хорошими. Таким образом, мне интересно, есть ли причина, по которой я должен использовать GET-запрос вообще.

4b9b3361

Ответ 1

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

Я рад, что вы называете POST-запросы "немного" более безопасными, потому что это в значительной степени то, что они есть; это тривиально, чтобы подделать запрос POST пользователем на страницу. Тем не менее, если запрос POST не позволяет веб-ускорителям или перезагрузкам повторно запускать действие случайно.

Как AJAX, есть еще одно соображение: если вы возвращаете JSON с поддержкой обратного вызова, будьте очень осторожны, чтобы не помещать какие-либо конфиденциальные данные, которые вы не хотите видеть на других веб-сайтах. У Википедии была уязвимость в этих строках, где пользовательский токен анти-CSRF был обнаружен через их JSON API.

Ответ 2

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

  • Повторяться без каких-либо проблем - если браузер обнаруживает ошибку, он может спокойно повторить
  • Результат кэшируется в браузере
  • Кэш-память через прокси

Все это хорошо. Все, что требуется только для получения данных (в частности, общедоступных данных), должно действительно быть GET. Сервер должен отправлять разумные заголовки Last-Modified: и Expires: заголовки, чтобы разрешить кэширование, если это необходимо.

Ответ 4

Есть еще одно отличие, о котором никто не упоминал.

Запросы GET передаются в строке URL и, следовательно, подпадают под ограничение длины, обычно зависящее от браузера.

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

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

Было время, когда у IE, по-моему, была очень короткая строка URL-адреса GET. Некоторые приложения, такие как примечания Lotus, используют большое количество случайных символов для представления идентификаторов документа. У меня было неудовольствие от использования другого продукта, который генерировал случайные строки, поэтому URL-адрес страницы был уникальным каждый раз. Случайная строка была ОГРОМНОЙ... и она не всегда работала с IE6 из памяти.

Ответ 5

Все хорошие моменты, однако, в ответ на вопрос, запросы GET более полезны в определенных сценариях над запросами POST:

  • Они могут быть помечены закладкой
  • Они могут быть кэшированы
  • Они быстрее
  • У них есть известные последствия (при условии, что они не изменяют данные), поэтому их посещение несколько раз не проблема.

Ответ 6

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

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

Ответ 7

Возможно, что самое главное, GET является книжной маркировкой/видимым в истории URL-адресов и доступен для поиска в Google.

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