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
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
POST
отправляет данные на сервер.
Content-Type
. Разница между PUT
и POST
заключается в том, что PUT
является идемпотентным: вызов его один или несколько раз подряд имеет тот же эффект (то есть не побочный эффект ), тогда как последовательные идентичные POST
могут иметь дополнительные эффекты, такие как передача заказа несколько раз.
Запрос POST
обычно отправляется через HTML-форму и приводит к изменению на сервере. В этом случае тип содержимого выбирается путем помещения соответствующей строки в атрибут
enctype
элемента