В спецификации HTTP говорится, что запрос POST может содержать произвольный массив данных.
Это верно. Однако, в свою очередь, существует несколько спецификаций формата этих данных. В случае HTML-форм чаще всего используется application/x-www-form-urlencoded
, за которым следует multipart/form-data
. Вы можете установить его с помощью атрибута enctype
элемента HTML <form>
. См. Также главу 17.13.4 Типы содержимого формы спецификации HTML.
Элемент формы HTML может отправлять URL-адреса и может содержать элементы ввода, но эти элементы ввода превращаются в строку запроса.
Вот как действительно application/x-www-form-urlencoded
работает. Обратите внимание, что эта строка запроса фактически представляет собой тело HTTP-запроса! Так что тело запроса определенно не пустое, как вы думаете.
Как получить форму для отправки данных в теле HTTP-запроса POST, отправляемого при нажатии кнопки отправки?
Таким образом, он на самом деле уже делает это. Если вы намеревались отправить копию представления HTML формы дерева DOM самой формы, как несколько намекало в предыдущем выражении, то вы можете добиться этого с помощью JavaScript с помощью следующего:
<form onsubmit="this.source.value=this.outerHTML">
...
<input type="hidden" name="source" />
<input type="submit" />
</form>
Представление формы в виде всего HTML-дерева DOM в виде строки доступно в качестве параметра запроса с именем source
.