В чем разница между POST и PUT HTTP REQUEST? - PullRequest
699 голосов
/ 20 сентября 2008

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

Ответы [ 12 ]

2 голосов
/ 22 октября 2018

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

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

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

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

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

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

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

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

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

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

0 голосов
/ 27 марта 2019

Стоит отметить, что POST подвержен некоторым распространенным атакам CSRF , тогда как PUT - нет.

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

Обычный запрос (куки отправляются): (PUT не поддерживается значением атрибута)

<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>

XHR-запрос (куки отправляются): (PUT вызовет предварительный запрос)

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