POST
====

**HTTP-метод `POST`** предназначен для отправки данных на сервер. Тип тела запроса указывается в заголовке `Content-Type`.

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

Запрос `POST` обычно отправляется через форму HTML и приводит к изменению на сервере. element or the formenctype attribute of the <input> or <button> elements:">В этом случае тип содержимого выбирается путём размещения соответствующей строки в атрибуте `enctype` элемента `<form>` или `formenctype` атрибута элементов `<input>` или `<button>`:

* `application/x-www-form-urlencoded`: значения кодируются в кортежах с ключом, разделённых символом `'&'`, с `'='` между ключом и значением. Не буквенно-цифровые символы - percent encoded: это причина, по которой этот тип не подходит для использования с двоичными данными (вместо этого используйте `multipart/form-data`)
* `multipart/form-data`: каждое значение посылается как блок данных ("body part"), с заданными пользовательским клиентом разделителем ("boundary"), разделяющим каждую часть. Эти ключи даются в заголовки `Content-Disposition` каждой части
* `text/plain`

Когда запрос `POST` отправляется с помощью метода, отличного от HTML-формы, — например, через `XMLHttpRequest` — тело может принимать любой тип. Как описано в спецификации HTTP 1.1, `POST` предназначен для обеспечения единообразного метода для покрытия следующих функций:

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

|  |  |
| --- | --- |
| Запрос имеет тело | Да |
| Успешный ответ имеет тело | Да |
| Безопасный | Нет |
| Идемпотентный | Нет |
| Кешируемый | Только если включена информация о свежести сообщения |
| Допускается в HTML-формах | Да |

Синтаксис
---------
```

POST /index.html
```

Пример
------

Простая форма запроса, используя стандартный `application/x-www-form-urlencoded` content type:


```http
POST / HTTP/1.1
Host: foo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13

say=Hi&to=Mom
```


Форма запроса, используя `multipart/form-data` content type:


```http
POST /test.html HTTP/1.1
Host: example.org
Content-Type: multipart/form-data;boundary="boundary"

--boundary
Content-Disposition: form-data; name="field1"

value1
--boundary
Content-Disposition: form-data; name="field2"; filename="example.txt"

value2
--boundary--
```

Спецификация
------------

| Specification |
| --- |
| HTTP Semantics # POST |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Content-Type`
* `Content-Disposition`
* GET