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