ПОЛУЧИТЬ против ПОЧТУ это действительно имеет значение? - PullRequest
14 голосов
/ 09 июля 2009

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

Ответы [ 19 ]

1 голос
/ 09 июля 2009

Вам известно о нескольких тонких различиях в безопасности. Смотри мой вопрос

ПОЛУЧИТЬ против ПОЧТЫ в плане безопасности?

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

Может быть, очевидно, но стоит упомянуть.

0 голосов
/ 09 июля 2009

Технически, нет. Все, что делает GET - это публикует материал в первой строке HTTP-запроса, а POST публикует материал в теле.

Тем не менее, то, как «веб-инфраструктура» обрабатывает различия, имеет огромное значение. Мы могли бы написать целую книгу об этом. Тем не менее, я дам вам несколько «лучших практик»:

Используйте «POST», когда ваш HTTP-запрос изменит что-то «конкретное» внутри веб-сервера. Т.е. вы редактируете страницу, делаете новую запись и так далее. ПОСТЫ с меньшей вероятностью будут кэшироваться или рассматриваться как нечто, «повторяемое без побочных эффектов»

Используйте «GET», когда хотите «посмотреть на объект». Теперь такой взгляд может изменить что-то «за кулисами» с точки зрения кэширования или ведения записей, но это не должно изменить ничего «существенного». То есть, я мог бы повторять свой GET снова и снова, и ничего плохого не случилось бы, кроме завышенного количества попаданий. GET должны легко закладываться, чтобы пользователь мог вернуться к тому же объекту позже.

Параметры для GET (материал после?, Традиционно) следует рассматривать как «атрибуты для представления» или «что просматривать» и так далее. Опять же, это на самом деле ничего не должно изменить: используйте для этого POST.

И, наконец, последнее слово, когда вы POST-то (например, создаете новый комментарий), выполняете обработку для публикации 302, чтобы «перенаправить» пользователя на новый URL, который просматривает этот объект. Т.е. POST обрабатывает информацию, а затем перенаправляет браузер в оператор GET для просмотра нового состояния. Отображение информации в результате POST также может вызвать проблемы. Перенаправление часто используется и заставляет вещи работать лучше.

0 голосов
/ 09 июля 2009

Да, это важно. GET и POST совсем разные, правда.

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

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

0 голосов
/ 09 июля 2009

Зависит от программного обеспечения на стороне сервера. Некоторые библиотеки, такие как CGI.pm в perl, обрабатывают обе по умолчанию. Но существуют ситуации, когда вам более или менее необходимо использовать POST вместо GET, по крайней мере, для передачи данных на сервер. Большие объемы данных (где соответствующий URL-адрес GET станет слишком длинным), двоичные данные (чтобы избежать большого количества проблем с кодированием / декодированием), многокомпонентные файлы, неразборные заголовки (для непрерывных обновлений в стиле pre-AJAX ...) и аналогичные .

0 голосов
/ 09 июля 2009

Имейте в виду, что браузеры могут кэшировать запросы GET, но обычно не будут кэшировать запросы POST.

0 голосов
/ 09 июля 2009

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

В чем проблема. Если у вас есть действие, которое уничтожает или изменяет данные в действии GET, Google разрывает ваш сайт, когда он сканирует индексацию.

0 голосов
/ 09 июля 2009

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

0 голосов
/ 09 июля 2009

Нет, они не должны, кроме ответа @ jbruce2112, а для загрузки файлов требуется POST.

0 голосов
/ 09 июля 2009

Поскольку GET предназначен для указания ресурса, который вы хотите получить, в зависимости от точного программного обеспечения на стороне сервера, веб-сервер (или балансировщик нагрузки перед ним) может иметь ограничение на размер запросов GET для предотвращения атак типа «отказ в обслуживании»....

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