La especificación HTTP dice que una solicitud POST puede contener un cuerpo de datos arbitrario.
Correcto. Sin embargo, hay varias especificaciones del formato de esos datos. En el caso de formularios HTML, el más utilizado es application/x-www-form-urlencoded
, seguido de multipart/form-data
. Puede configurarlo a través del atributo enctype
del elemento HTML <form>
. Ver también el capítulo 17.13.4 Form Content Types de la especificación HTML.
Un elemento de formulario HTML Publicación de una URL y puede contener elementos de entrada, pero los elementos de entrada llegar a convertirse en una cadena de consulta.
Así es como funciona application/x-www-form-urlencoded
. ¡Tenga en cuenta que esta cadena de consulta realmente representa todo el cuerpo de solicitud HTTP! Entonces, el cuerpo de la solicitud definitivamente no está vacío, como pareces pensar.
¿Cómo puedo obtener un formulario para enviar también a lo largo de los datos en el cuerpo de la petición HTTP POST que se envía cuando su botón de enviar se presiona?
De hecho, ya lo hace. Si intented para enviar una copia de la representación del árbol DOM HTML de la forma en sí misma, como algo dado a entender en la declaración anterior, entonces se puede lograr que con un poco de ayuda de JavaScript de la siguiente manera:
<form onsubmit="this.source.value=this.outerHTML">
...
<input type="hidden" name="source" />
<input type="submit" />
</form>
Todo el HTML La representación de árbol DOM del formulario está entonces en formato de cadena disponible como parámetro de solicitud con el nombre source
.
Si uso AJAX para hacer el POST, entonces el navegador no manejará automágicamente la respuesta HTTP, y yo quiero que lo haga. En otras palabras, estoy buscando una respuesta a la pregunta que no dependa de JavaScript, sino simplemente HTML. –