Le specifiche HTTP indicano che una richiesta POST può contenere un corpo di dati arbitrario.
Questo è corretto. Esistono tuttavia diverse specifiche del formato di tali dati. Nel caso di moduli HTML, il più comunemente usato è application/x-www-form-urlencoded
, seguito da multipart/form-data
. Puoi impostarlo tramite l'attributo enctype
dell'elemento HTML <form>
. Vedi anche il capitolo 17.13.4 Form Content Types della specifica HTML.
Un HTML elemento del form possono inviare a un URL e può contenere elementi di input, ma quegli elementi di input arrivare trasformato in una stringa di query.
È così che funziona application/x-www-form-urlencoded
. Si noti che questa stringa di query rappresenta in realtà l'intero corpo della richiesta HTTP! Quindi il corpo della richiesta non è assolutamente vuoto, come sembri pensare.
Come posso ottenere un modulo per inviare i dati anche lungo nel corpo della richiesta HTTP POST che invia quando il suo pulsante di invio viene premuto?
In questo modo lo fa già. Se intented di inviare una copia della rappresentazione ad albero DOM HTML del modulo stesso, come un po 'accennato nella dichiarazione precedente, allora si può ottenere che, con un piccolo aiuto di JavaScript come segue:
<form onsubmit="this.source.value=this.outerHTML">
...
<input type="hidden" name="source" />
<input type="submit" />
</form>
L'intero HTML La rappresentazione dell'albero DOM del modulo è quindi in formato stringa disponibile come parametro di richiesta con nome source
.
Se utilizzo AJAX per eseguire il POST, il browser non gestirà automaticamente la risposta HTTP e lo voglio. In altre parole, sto cercando una risposta alla domanda che non si basa su JavaScript, ma solo HTML. –