POST — HTTP | MDN

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:

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:

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

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

Want to get more involved?

Learn how to contribute.

This page was last modified on by MDN contributors.

php — Где в post-запросе передаются параметры?

Вопрос задан

Изменён 5 лет 7 месяцев назад

Просмотрен 32k раз

В стандарте HTTP есть 3 составляющие: стартовая строка, заголовки и тело.

Когда отправляю GET-запрос, то все параметры идут вместе с URI. Например

GET /index.php?name='myname'&age=26 HTTP/1.1

А когда я передаю те же самые данные, но методом POST, то эти параметры name и age где передаются? В теле запроса? В заголовках? Как выглядит этот HTTP-запрос?

Имеется ввиду чистый HTTP-запрос, как прописано в протоколе.

Если переформулировать вопрос. PHP, когда формирует массив $_POST, то данные этого массива из какой части HTTP-запроса берет? В случае с $_GET все понятно, берет из URI. А с $_POST неясно.

  • php
  • http
  • post

2

Итак, подытожу всё что тут сказали

GET Передаётся в URL

GET https://example.com/comments?page=2&pageSize=10

POST Передаёт данные в теле

POST https://example.com/comments HTTP/1.1
content-type: application/json
{
    "name": "sample",
    "time": "Wed, 21 Oct 2015 18:27:50 GMT"
}

Заголовок content-type определяет как данные будут переданы (JSON или кодированы url-encoded) таким образом сервер поймёт как их обработать.

На заметку:

GET

  • Могут кэшироваться
  • Остаются в истории браузера
  • Могут быть/стать «закладкой»
  • Не должны использоваться для передачи паролей и всего такого
  • Имеют ограничение по длине (URL и в некоторых браузерах свои заморочки)

POST

  • Никогда не кэшируются
  • Не остаются в истории браузера
  • Не могут быть/стать «закладкой»
  • Не имеют таких ограничений по длине (обычно в браузерах и на web серверах есть ограничение по умолчанию)

3

Данные POST запроса передаются в теле. То есть стартовая строка, потом заголовки, пустая строчка, а дальше идут параметры POST. Часто в формате url-encoded (formdata) — это как в адресной сроке у GET запроса, но в последнее время есть тенденция передавать в теле json. Формат кодировки запроса определяется по заголовку Content-encoding.

А когда я передаю те же самые данные, но методом POST, то как выглядит этот http-запрос?

Очень удобно использовать утилиту nc для отладки текстовых протоколов. Запустите её с флагом -l с указанием порта, который она будет прослушивать, и выполните свой POST-запрос на

localhost в соседнем терминале.

nc -l 8080
curl http://localhost:8080/index.php -d name=myname -d age=26

Вы увидите примерно следующее

POST /index.php HTTP/1.1
Host: localhost:8080
User-Agent: curl/7.47.0
Accept: */*
Content-Length: 18
Content-Type: application/x-www-form-urlencoded
name=myname&age=26

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

POST-HTTP | MDN

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

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

Запрос POST обычно отправляется через HTML-форму и приводит к изменению на сервере. В этом случае тип содержимого выбирается путем помещения соответствующей строки в атрибут

enctype элемента
или в атрибут formenctype элементов или