В чем разница между POST и PUT HTTP REQUEST?

Кажется, что они оба отправляют данные на сервер внутри тела, так что же их отличает?


person fuentesjr    schedule 20.09.2008    source источник
comment
Отвечает ли это на ваш вопрос? PUT и POST в REST   -  person Shaheen Zahedi    schedule 26.04.2020


Ответы (19)


HTTP PUT:

PUT помещает файл или ресурс по определенному URI, и именно по этому URI. Если в этом URI уже есть файл или ресурс, PUT заменяет этот файл или ресурс. Если там нет файла или ресурса, PUT создает его. PUT является идемпотентным, но, как ни парадоксально, ответы PUT не кэшируются .

HTTP 1.1 RFC расположение для PUT

HTTP POST:

POST отправляет данные на определенный URI и ожидает, что ресурс в этом URI обработает запрос. На этом этапе веб-сервер может определить, что делать с данными в контексте указанного ресурса. Метод POST не является идемпотентным, однако ответы POST < em> кэшируются, пока сервер устанавливает соответствующие заголовки Cache-Control и Expires.

Официальный HTTP RFC определяет, что POST:

  • Аннотация существующих ресурсов;
  • Размещение сообщения на доске объявлений, в группе новостей, в списке рассылки или в аналогичной группе статей;
  • Предоставление блока данных, например результата отправки формы, процессу обработки данных;
  • Расширение базы данных с помощью операции добавления.

HTTP 1.1 RFC-расположение для POST

Разница между POST и PUT:

Сам RFC объясняет основную разницу:

Принципиальное различие между запросами POST и PUT отражается в различном значении Request-URI. URI в запросе POST идентифицирует ресурс, который будет обрабатывать вложенный объект. Этот ресурс может быть процессом приема данных, шлюзом к другому протоколу или отдельным объектом, принимающим аннотации. Напротив, URI в запросе PUT идентифицирует объект, заключенный с запросом - пользовательский агент знает, какой URI предназначен, и сервер НЕ ДОЛЖЕН пытаться применить запрос к какому-либо другому ресурсу. Если сервер желает, чтобы запрос был применен к другому URI, он ДОЛЖЕН отправить ответ 301 (перемещен навсегда); затем пользовательский агент МОЖЕТ принять собственное решение относительно перенаправления запроса.

Кроме того, немного более кратко, RFC 7231, раздел 4.3.4 PUT состояния (курсив наш),

4.3.4. PUT

Метод PUT запрашивает, чтобы состояние целевого ресурса было created или replaced с состоянием, определенным представлением, заключенным в полезную нагрузку сообщения запроса.

Использование правильного метода, не имеющего отношения к делу:

Одно из преимуществ REST ROA по сравнению с SOAP заключается в том, что при использовании HTTP REST ROA он способствует правильному использованию глаголы / методы HTTP. Так, например, вы можете использовать PUT только тогда, когда хотите создать ресурс в этом точном месте. И вы никогда не стали бы использовать GET для создания или изменения ресурса.

person Brian R. Bondy    schedule 20.09.2008
comment
Я читал в спецификациях, что If the Request-URI does not point to an existing resource [...] the origin server *can* create the resource with that URI. Так что реализация PUT, которая отказывается создавать ресурс, если его нет, была бы правильной, верно? Если да, то происходит ли это на практике? Или реализации обычно и создают на PUT? - person houcros; 24.01.2017
comment
дополнительное исключение, которое делает разницу очень очевидной, находится по следующему URL-адресу - dzone.com/articles/put- vs-post - person Ashish Shetkar; 03.04.2018
comment
Я не понимаю, как реализовать идемпотентность PUT. как правило, большинство API будет использовать автоматическое создание идентификатора в случае создания нового ресурса. а в PUT вы должны создать ресурс, если он не существует, но использовать идентификатор, указанный в URI, но как вы можете это сделать, если метод генерации идентификатора настроен на автоматический ??? - person Roni Axelrad; 16.09.2018
comment
Итак, в двух словах: URI в запросе POST идентифицирует ресурс, который будет обрабатывать вложенный объект. URI в запросе PUT идентифицирует сам объект. - person Drazen Bjelovuk; 09.04.2019
comment
Ответы на метод POST не кэшируются, ЕСЛИ ответ не включает соответствующие поля заголовка Cache-Control или Expires. - person nCardot; 12.03.2020
comment
Есть также некоторые различия, связанные с безопасностью: см. Мой ответ ниже - person Marinos An; 07.04.2020
comment
@RoniAxelrad Я сам об этом думал. Но я думаю, что идея в том, что никогда не следует создавать дублирующий ресурс. Так, например, если вы хотите сохранить транзакцию как ресурс с помощью api.example.com/payments и тело двух запросов абсолютно одинаково, почему вы храните их оба и генерируете уникальные первичные ключи? Возможно, вы обрабатываете повторяющиеся запросы? Может, стоит пересмотреть свой дизайн? - person Marthinus Engelbrecht; 25.04.2020
comment
Re: парадоксальным образом ответы PUT не кэшируются. Возможно, стоит расширить парадокс, заключающийся в том, что можно кэшировать в PUT, это ЗАПРОСЫ: в RFC 7231 2014 года (один из RFC, который устарел RFC 2616 1999 года) упоминается здесь, что PUT allows a user agent to know when the representation body it has in memory remains current, то есть сервер MUST NOT send ... an ETag or Last-Modified ... unless the request's representation was saved without any transformation. Клиентов с таким кешем может быть не так много, но серверы должны соответствовать спецификации. - person Slawomir Brzezinski; 08.11.2020

Только семантика.

Предполагается, что HTTP PUT принимает тело запроса, а затем сохраняет его в ресурсе, идентифицированном URI.

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

PUT - это похоже на загрузку файла. Помещение в URI влияет именно на этот URI. POST для URI вообще может иметь какой-либо эффект.

person Jonathan Arkell    schedule 20.09.2008
comment
То, что подразумевает определенную функцию, на самом деле не может - person TaylorMac; 08.07.2013

Чтобы привести примеры ресурсов в стиле REST:

POST /books с кучей информации о книге может создать новую книгу и ответить новым URL-адресом, идентифицирующим эту книгу: /books/5.

PUT /books/5 придется либо создать новую книгу с идентификатором 5, либо заменить существующую книгу с идентификатором 5.

В нересурсном стиле POST можно использовать практически для всего, что имеет побочный эффект. Еще одно отличие состоит в том, что PUT должен быть идемпотентным - несколько PUTs одних и тех же данных по одному и тому же URL-адресу должно быть нормально, тогда как несколько POSTs могут создавать несколько объектов или что-то еще, что делает ваше POST действие.

person bhollis    schedule 20.09.2008
comment
Привет, Боллис! Что будет, если я воспользуюсь POST / books / 5? он выбросит ресурс, который не найден? - person ChanGan; 15.02.2013
comment
Я считаю, что идемпотентность - самое важное различие между PUT и POST. - person Martin Andersson; 01.03.2013
comment
Привет, ЧанГан, вот объяснение вашего дела POST / books / 5, которое дает Википедия: Обычно не используется. Рассматривайте указанный элемент как самостоятельную коллекцию и создайте в нем новую запись. - person rdiachenko; 28.11.2013
comment
этот ответ создает впечатление, что PUT и POST могут быть определены для одного и того же ресурса, однако другое различие рядом с идемпотентностью заключается в том, кто контролирует пространство идентификаторов. В PUT пользователь управляет пространством идентификаторов, создавая ресурсы с определенным идентификатором. В POST сервер возвращает идентификатор, на который пользователь должен ссылаться в последующих вызовах, таких как GET. Вышеупомянутое странно, потому что это смесь того и другого. - person Tommy; 26.05.2020

  1. GET: получает данные с сервера. Другого эффекта не должно иметь.
  2. PUT: заменяет целевой ресурс полезными данными запроса. Может использоваться для обновления или создания новых ресурсов.
  3. PATCH: похоже на PUT, но используется для обновления только определенных полей в существующем ресурсе.
  4. POST: выполняет обработку полезных данных для конкретного ресурса. Может использоваться для различных действий, включая создание нового ресурса, загрузку файла или отправку веб-формы.
  5. УДАЛИТЬ: удаляет данные с сервера.
  6. TRACE: позволяет проверить, что получает сервер. Он просто возвращает то, что было отправлено.
  7. OPTIONS: позволяет клиенту получать информацию о методах запроса, поддерживаемых службой. Соответствующий заголовок ответа - Разрешить с поддерживаемыми методами. Также используется в CORS как предварительный запрос для информирования сервера о фактическом методе запроса и запроса пользовательских заголовков.
  8. HEAD: возвращает только заголовки ответа.
  9. CONNECT: используется браузером, когда он знает, что общается с прокси-сервером, а окончательный URI начинается с https: //. Назначение CONNECT - разрешить сеанс TLS с сквозным шифрованием, чтобы данные не считывались прокси-сервером.
person Jonatan Dragon    schedule 08.03.2018
comment
лучший короткий ответ - person vibs2006; 03.12.2018
comment
Запускается ли CONNECT перед каждым запросом при использовании https? - person variable; 13.05.2020
comment
Информация о PUT и POST неверна в этом ответе. PUT можно использовать для создания новой сущности, а также для обновления существующей сущности. POST является более общим и может использоваться для выполнения аналогичных действий, таких как PUT, или может использоваться для выполнения любых других действий также с входящим объектом (с побочными эффектами), и в идеале PUT должен быть идемпотентным, тогда как POST может или не может быть идемпотент - person Ketan R; 22.07.2020
comment
@KetanR Спасибо за ваш комментарий. Я обновил ответ. - person Jonatan Dragon; 23.07.2020

PUT предназначен как метод для «загрузки» материала в конкретный URI или перезаписи того, что уже есть в этом URI.

С другой стороны, POST - это способ отправки данных, СВЯЗАННЫХ с заданным URI.

См. HTTP RFC.

person Daniel Bruce    schedule 20.09.2008

Насколько мне известно, PUT в основном используется для обновления записей.

  1. POST - для создания документа или любого другого ресурса

  2. PUT - обновить созданный документ или любой другой ресурс.

Но чтобы прояснить этот вопрос, PUT обычно «заменяет» существующую запись, если она есть, и создает, если ее нет ...

person ChanGan    schedule 15.02.2013
comment
Что в этом контексте является рекордом? Речь идет о HTTP-запросе. - person Kishore; 04.02.2015
comment
Что будет делать POST, если документ / ресурс уже присутствует? Будет ли это ошибка, или просто сработает нормально? - person Aditya Pednekar; 17.05.2018

Другие уже опубликовали отличные ответы, я просто хотел добавить, что с большинством языков, фреймворков и вариантов использования вы будете иметь дело POST гораздо, гораздо чаще, чем PUT. До такой степени, что PUT, DELETE, и т. Д. - это в основном пустяковые вопросы.

person Jason Morrison    schedule 20.09.2008

См.: http://zacharyvoase.com/2009/07/03/http-post-put-diff/

В последнее время меня сильно раздражает распространенное заблуждение веб-разработчиков, что POST используется для создания ресурса, а PUT используется для обновления / изменения.

Если вы посмотрите на страницу 55 RFC 2616 («Протокол передачи гипертекста - HTTP / 1.1»), Раздел 9.6 (« PUT »), вы увидите, для чего на самом деле используется PUT:

Метод PUT запрашивает, чтобы закрытый объект был сохранен под предоставленным Request-URI.

Также есть удобный абзац, объясняющий разницу между POST и PUT:

Принципиальное различие между запросами POST и PUT отражается в различном значении Request-URI. URI в запросе POST идентифицирует ресурс, который будет обрабатывать вложенный объект. Этот ресурс может быть процессом приема данных, шлюзом к другому протоколу или отдельным объектом, принимающим аннотации. Напротив, URI в запросе PUT идентифицирует объект, заключенный с запросом - пользовательский агент знает, какой URI предназначен, и сервер НЕ ДОЛЖЕН пытаться применить запрос к какому-либо другому ресурсу.

В нем ничего не говорится о разнице между обновлением / созданием, потому что речь не об этом. Речь идет о разнице между этим:

obj.set_attribute(value) # A POST request.

И это:

obj.attribute = value # A PUT request.

Так что, пожалуйста, остановите распространение этого популярного заблуждения. Прочтите свои RFC.

person Najeebul Hasan    schedule 05.04.2014
comment
Это кажется бессмысленно грубым и бесполезным педантичным. В приведенном вами примере PUT новая сущность в RESTful api является «новой» записью и доступна в этом месте. Сомнительно, что это хороший выбор дизайна, позволяющий таким образом изменять под-члены (я думаю, что это не идеально), но даже если бы это было так, вы используете подвиды для атаки большого количества полезной информации. В большинстве случаев описание в том виде, в котором оно обычно сформулировано, представляет собой прекрасное изложение как содержания RFC в кратком изложении, так и изложение обычной и общепринятой практики. Кроме того, вам не повредит быть вежливым. - person tooluser; 07.04.2015
comment
Это не может получить достаточно голосов. PUT нет места в REST API. В большинстве случаев POST указывает правильную семантику. - person Beefster; 09.04.2018
comment
Не сказано хорошо, но действительно точная интерпретация RFC. Похоже, мир веб-разработчиков - это настоящее болото дезинформации. - person William T Froggard; 14.01.2020
comment
@Beefster Не существует такой вещи, как "POST Указывает". Наджибул сделал здесь важное замечание. Как вы понимаете, на что это указывает? за исключением того, что вы просто используете его, потому что вы всегда использовали его таким образом с первого дня, когда вы его изучили, но действительно не знаете, почему вы должны использовать его по сравнению с другими? - person Mosia Thabo; 18.02.2020
comment
предоставленная ссылка не работает - person Tamsamani; 20.01.2021

Определите операции с помощью методов HTTP

Протокол HTTP определяет ряд методов, которые придают семантическое значение запросу. Наиболее распространенные методы HTTP, используемые большинством веб-API RESTful:

GET извлекает представление ресурса по указанному URI. Тело ответного сообщения содержит подробную информацию о запрошенном ресурсе.

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

PUT либо создает, либо заменяет ресурс по указанному URI. В теле сообщения запроса указывается ресурс, который должен быть создан или обновлен.

PATCH выполняет частичное обновление ресурса. В теле запроса указывается набор изменений, применяемых к ресурсу.

DELETE удаляет ресурс по указанному URI.

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

Resource POST GET PUT DELETE
/customers Create a new customer Retrieve all customers Bulk update of customers Remove all customers
/customers/1 Error Retrieve the details for customer 1 Update the details of customer 1 if it exists Remove customer 1
/customers/1/orders Create a new order for customer 1 Retrieve all orders for customer 1 Bulk update of orders for customer 1 Remove all orders for customer 1

Различия между POST, PUT и PATCH могут сбивать с толку.

Запрос POST создает ресурс. Сервер назначает URI новому ресурсу и возвращает этот URI клиенту. В REST model вы часто применяете POST запросы к коллекциям. Новый ресурс добавлен в коллекцию. Запрос POST также может использоваться для отправки данных для обработки в существующий ресурс без создания какого-либо нового ресурса.

Запрос PUT создает ресурс или обновляет существующий ресурс. Клиент указывает URI для ресурса. Тело запроса содержит полное представление ресурса. Если ресурс с этим URI уже существует, он заменяется. В противном случае создается новый ресурс, если сервер поддерживает это. PUT запросы чаще всего применяются к ресурсам, которые представляют собой отдельные элементы, такие как конкретный заказчик, а не коллекции. Сервер может поддерживать обновления, но не создание через PUT. Поддерживать ли создание через PUT зависит от того, может ли клиент осмысленно назначать URI ресурсу до того, как он существует. В противном случае используйте POST для создания ресурсов и PUT or PATCH для обновления.

Запрос PATCH выполняет частичное обновление существующего ресурса. Клиент указывает URI для ресурса. В теле запроса указывается набор изменений, применяемых к ресурсу. Это может быть более эффективным, чем использование PUT, потому что клиент отправляет только изменения, а не все представление ресурса. Технически PATCH также может создать новый ресурс (указав набор обновлений для нулевого ресурса), если сервер поддерживает это.

PUT запросы должны быть идемпотентными. Если клиент отправляет один и тот же PUT запрос несколько раз, результаты всегда должны быть одинаковыми (один и тот же ресурс будет изменен с одинаковыми значениями). POST and PATCH запросы не могут быть идемпотентными.

person Long Nguyen    schedule 06.04.2017
comment
Я думаю, у вас есть PUT и POST в обратном направлении - person Beefster; 27.02.2018
comment
Нет. PUT предназначен для фактического размещения буквального содержимого по URL-адресу и редко имеет место в REST API. POST является более абстрактным и охватывает любой вид добавления контента, который не имеет семантики Поместите этот точный файл по этому точному URL-адресу. - person Beefster; 09.04.2018
comment
-1, потому что в дополнение к update PUT также используется для создания ресурса target (ресурс, идентифицированный URI запроса), в отличие от POST, который не может создать целевой ресурс, потому что это не операция CRUD над состояниями ресурсов (управление данными), а операция process (см. RFC 7231). Процесс может создать ресурс, но отличный от целевого ресурса, так что это делает его операцией CRUD. - person Maggyero; 04.12.2020

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

person user12786    schedule 20.09.2008

Когда использовать тот или иной вариант, должно быть довольно просто, но сложные формулировки сбивают с толку многих из нас.

Когда их использовать:

  • Используйте PUT, если вы хотите изменить отдельный ресурс, который уже является частью коллекции ресурсов. PUT полностью заменяет ресурс. Пример: PUT /resources/:resourceId

    Примечание: используйте PATCH, если вы хотите обновить часть ресурса.


  • Используйте POST, если хотите добавить дочерний ресурс в коллекцию ресурсов.
    Пример: POST => /resources

В основном:

  • Как правило, на практике всегда используйте PUT для операций UPDATE.
  • Всегда используйте POST для операций CREATE.

Пример:

GET / company / reports => Получить все отчеты
GET / company / reports / {id} => Получить информацию об отчете по идентификатору
POST / company / reports => < em> Создать новый отчет
PUT / company / reports / {id} => Обновить информацию отчета, идентифицированную "id"
PATCH / company / reports / {id} => Обновить часть информации отчета, обозначенную идентификатором
DELETE / company / reports / {id} => Удалить отчет по "id"

person Dzenis H.    schedule 18.02.2020

Разница между POST и PUT заключается в том, что PUT является идемпотентным, это означает, что вызов одного и того же запроса PUT несколько раз всегда будет давать один и тот же результат (это не является побочным эффектом), в то время как, с другой стороны, повторный вызов запроса POST может иметь ( дополнительные) побочные эффекты многократного создания одного и того же ресурса.

GET: Запросы с использованием GET только извлекают данные, то есть запрашивают представление указанного ресурса.

POST: он отправляет данные на сервер для создания ресурса. Тип тела запроса указывается заголовком Content-Type. Это часто вызывает изменение состояния или побочные эффекты на сервере.

PUT: Создает новый ресурс или заменяет представление целевого ресурса полезными данными запроса.

PATCH: используется для частичного изменения ресурса.

DELETE: удаляет указанный ресурс

TRACE: он выполняет проверку обратной связи сообщений на пути к целевому ресурсу, обеспечивая полезный механизм отладки.

OPTIONS: используется для описания параметров связи для целевого ресурса, клиент может указать URL-адрес для метода OPTIONS или звездочку (*) для ссылки на весь сервер.

HEAD: запрашивает ответ, идентичный ответу на запрос GET, но без тела ответа.

CONNECT: устанавливает туннель к серверу, идентифицированному целевым ресурсом, может использоваться для доступа к веб-сайтам, использующим SSL (HTTPS).

person irfan    schedule 22.10.2018

Простыми словами можно сказать:

1.HTTP Get: используется для получения одного или нескольких элементов.

2.HTTP-сообщение: используется для создания элемента.

3.HTTP Put: используется для обновления элемента

4.HTTP-патч: используется для частичного обновления элемента.

5.HTTP Delete: используется для удаления элемента.

person Prateek Gupta    schedule 18.04.2020

Стоит отметить, что POST подвержен некоторым распространенным атакам подделки межсайтовых запросов (CSRF), а PUT - нет.

Приведенные ниже CSRF невозможны с PUT, когда жертва посещает attackersite.com.

Эффект атаки заключается в том, что жертва непреднамеренно удаляет пользователя только потому, что он (жертва) вошел в систему как admin на target.site.com перед посещением attackersite.com:

Вредоносный код на attackersite.com:

Случай 1. Обычный запрос. сохраненные target.site.com файлы cookie будут автоматически отправлены браузером: (примечание: поддержка только PUT на конечной точке безопаснее, потому что это не поддерживаемое значение атрибута <form>)

<!--deletes user with id 5-->
<form id="myform" method="post" action="http://target.site.com/deleteUser" >
    <input type="hidden" name="userId" value="5">
</form>
<script>document.createElement('form').submit.call(document.getElementById('myform'));</script>

Случай 2: запрос XHR. сохраненные target.site.com файлы cookie будут автоматически отправлены браузером: (примечание: поддержка только PUT на конечной точке безопаснее, потому что попытка отправить PUT вызовет предварительный запрос, ответ на который не позволит браузеру запросить deleteUser страницу)

//deletes user with id 5
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://target.site.com/deleteUser");
xhr.withCredentials=true;
xhr.send(["userId=5"]);

MDN Ref: [..] В отличие от «простого запросы »(обсуждалось выше), - [[Means: POST / GET / HEAD]] - для предварительно заданных запросов браузер сначала отправляет HTTP-запрос, используя метод OPTIONS [..]

cors в действии: [..] Некоторые типы запросы, такие как DELETE или PUT, должны идти дальше и запрашивать разрешение сервера перед выполнением фактического запроса [..], что называется предварительным запросом [..]

person Marinos An    schedule 27.03.2019

Использование REST-ful

POST используется для создания нового ресурса, а затем возвращает ресурс URI

EX 
      REQUEST : POST ..../books
        {
        "book":"booName",
        "author":"authorName"
        }

Этот вызов может создать новую книгу и вернуть эту книгу URI

Response ...THE-NEW-RESOURCE-URI/books/5

PUT используется для замены ресурса, если этот ресурс существует, просто обновите его, но если этот ресурс не существует, создайте его,

REQUEST : PUT ..../books/5
{
"book":"booName",
"author":"authorName"
}

С PUT мы знаем идентификатор ресурса, но POST вернет новый идентификатор ресурса.

Использование без использования REST

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

PUT используется для размещения или замены буквального содержимого по определенному URL-адресу.

Еще одно различие между стилями REST -ful и non-REST-ful

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

PUT - это идемпотентная операция: она не будет иметь побочных эффектов, если будет выполняться несколько раз с одним и тем же запросом.

person Melad Basilius    schedule 10.06.2019

На самом деле нет никакой разницы, кроме названия. На самом деле есть принципиальная разница между GET и другими. С помощью метода "GET" -Request вы отправляете данные в строке url-адреса, которые разделяются сначала вопросительным знаком, а затем знаком &.

Но с методом запроса «POST» вы не можете передавать данные по URL-адресу, но вы должны передавать данные как объект в так называемом «теле» запроса. На стороне сервера вы должны затем прочитать тело полученного контента, чтобы получить отправленные данные. Но с другой стороны, нет возможности отправлять контент в теле, когда вы отправляете "GET" -Request.

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

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

Есть только эти два ОСНОВНЫХ МЕТОДА. ПОЛУЧИТЬ и ОТПРАВИТЬ. Но их отличает их структура, а не то, что вы кодируете в бэкэнде. В бэкэнде вы можете кодировать все, что хотите, с полученными данными. Но с запросом «POST» вы должны отправлять / получать данные в теле, а не в строке url-адреса, а с запросом «GET» вы должны отправлять / получать данные в строке url-address, а не в тело. Это все.

Все остальные методы, такие как «PUT», «DELETE» и т. Д., Имеют ту же структуру, что и «POST».

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

Также длина строки URL-адреса ограничена 1024 символами, тогда как метод "POST" не ограничен. Поэтому, если у вас большой объем данных, вы не сможете отправить его с помощью GET-запроса, но вам нужно будет использовать POST-запрос. Так что это еще один плюс для POST-запроса.

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

person H.A.    schedule 08.12.2019

И PUT, и POST - это методы отдыха.

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

POST не идемпотентен, например Create создаст две отдельные записи в цель, поэтому он не идемпотентен, поэтому CREATE широко используется в POST.

Выполнение одного и того же вызова с использованием POST с одинаковыми параметрами каждый раз вызовет две разные вещи, поэтому POST обычно используется для сценария Create.

person karthik kasubha    schedule 14.12.2019

Методы запроса GET, PUT и DELETE: CRUD (создание, чтение, обновление и удаление) операций, то есть операций управления данными, для состояния целевого ресурса (указанного в URI запроса):

  • GET должен читать состояние целевого ресурса;
  • PUT должен создать или обновить состояние целевого ресурса;
  • DELETE должно удалить состояние целевого ресурса.

Другой метод запроса POST. Он не должен создавать состояние целевого ресурса, такого как PUT, потому что это операция process с целью более высокого уровня, чем CRUD (см. RFC 7231, § 4.3.3). Процесс может создать ресурс, но отличный от целевого ресурса, в противном случае следует использовать метод запроса цели нижнего уровня PUT, так что даже в этом случае это не делает его операция CRUD.

Разница между операциями CRUD (GET, PUT и DELETE в HTTP) и операциями без CRUD (POST в HTTP) заключается в различии между абстрактными типами данных и объектами, которые Алан Кей подчеркивал в большинстве своих выступлений и в своей статье по ACM Ранняя история Smalltalk :

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

[…] К сожалению, большая часть того, что сегодня называют объектно-ориентированным программированием, представляет собой простое программирование в старом стиле с более причудливыми конструкциями. Многие программы загружены операциями в стиле присваивания, которые теперь выполняются более дорогими присоединенными процедурами.

[…] Заявления о назначении - даже абстрактные - выражают цели очень низкого уровня, и для выполнения чего-либо потребуется их больше. […] Еще один способ подумать обо всем этом: хотя позднее связывание автоматического выделения памяти не делает ничего такого, что не может сделать программист, его присутствие приводит как к более простому, так и к более мощному коду. ООП - это стратегия позднего связывания для многих вещей, и все они вместе сдерживают хрупкость и рост размеров намного дольше, чем старые методологии.

person Maggyero    schedule 04.12.2020

Post и Put в основном используются для публикации данных и другого обновления данных. Но вы можете сделать то же самое только с почтовым запросом.

person ANKIT MISHRA    schedule 16.06.2021