Wie kann ich beim Senden eines Formulars ein benutzerdefiniertes Feld im POST-Header festlegen?
Wie kann ich beim Senden eines Formulars ein benutzerdefiniertes Feld im POST-Header festlegen?
Antworten:
Es kann nicht gemacht werden - AFAIK.
Sie können jedoch beispielsweise jquery verwenden (obwohl Sie dies mit einfachem Javascript tun können), um das Formular zu serialisieren und zu senden (unter Verwendung von AJAX), während Sie Ihren benutzerdefinierten Header hinzufügen.
Schauen Sie sich die Abfrage an, serialize
die ein HTML-FORMULAR in form-url-encoded
POST-fähige Werte ändert .
Mein Vorschlag ist, entweder aufzunehmen
Legen Sie einen Cookie-Wert auf der Seite fest und lesen Sie ihn dann auf der Serverseite zurück.
Sie können keinen bestimmten Header festlegen, aber auf den Wert kann im Abschnitt "Header" und nicht im Inhaltskörper zugegriffen werden.
Aus der FormData- Dokumentation:
XMLHttpRequest Level 2 bietet Unterstützung für die neue FormData-Schnittstelle. FormData-Objekte bieten eine Möglichkeit, auf einfache Weise eine Reihe von Schlüssel / Wert-Paaren zu erstellen, die Formularfelder und deren Werte darstellen, die dann mithilfe der
XMLHttpRequest
send()
Methode einfach gesendet werden können .
Mit einem können XMLHttpRequest
Sie die benutzerdefinierten Header festlegen und dann das tun POST
.
In der Tat eine bessere Möglichkeit, um ein Cookie auf der Client-Seite zu speichern. Dann wird das Cookie automatisch mit jedem Seitenkopf für diese bestimmte Domain gesendet.
In node-js können Sie Cookies mit dem Cookie-Parser einrichten und verwenden .
ein Beispiel:
res.cookie('token', "xyz....", { httpOnly: true });
Jetzt können Sie darauf zugreifen:
app.get('/',function(req, res){
var token = req.cookies.token
});
Beachten Sie, dass httpOnly:true
sichergestellt ist, dass auf das Cookie normalerweise nicht manuell oder über Javascript zugegriffen werden kann und nur der Browser darauf zugreifen kann. Wenn Sie einige Header oder Sicherheitstoken mit einem Formularbeitrag und nicht über Ajax senden möchten, kann dies in den meisten Fällen als sicherer Weg angesehen werden. Stellen Sie jedoch sicher, dass die Daten über das sichere Protokoll / SSL gesendet werden, wenn Sie vertrauliche benutzerbezogene Informationen speichern, was normalerweise der Fall ist.
Hier ist was ich in Pub / Jade gemacht habe
extends layout
block content
script(src="/jquery/dist/jquery.js")
script.
function doThePost() {
var jqXHR = $.ajax({
type:'post'
, url:<blabla>
, headers: {
'x-custom1': 'blabla'
, 'x-custom2': 'blabla'
, 'content-type': 'application/json'
}
, data: {
'id': 123456, blabla
}
})
.done(function(data, status, req) { console.log("done", data, status, req); })
.fail(function(req, status, err) { console.log("fail", req, status, err); });
}
h1= title
button(onclick='doThePost()') Click
Sie könnten $ .ajax verwenden, um das natürliche Verhalten von zu vermeiden <form method="POST">
. Sie können beispielsweise der Übermittlungsschaltfläche ein Ereignis hinzufügen und die POST-Anforderung als AJAX behandeln.
Um jede Ajax-Anfrage zu ergänzen, habe ich sie hier beantwortet: https://stackoverflow.com/a/58964440/1909708
Um bestimmte Ajax-Anfragen hinzuzufügen, habe ich Folgendes implementiert:
var token_value = $("meta[name='_csrf']").attr("content");
var token_header = $("meta[name='_csrf_header']").attr("content");
$.ajax("some-endpoint.do", {
method: "POST",
beforeSend: function(xhr) {
xhr.setRequestHeader(token_header, token_value);
},
data: {form_field: $("#form_field").val()},
success: doSomethingFunction,
dataType: "json"
});
Sie müssen die meta
Elemente in der JSP hinzufügen , z
<html>
<head>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" content="${_csrf.headerName}"/>
<meta name="_csrf" content="${_csrf.token}"/>
Um eine Anfrage zum Senden eines Formulars (synchron) hinzuzufügen, habe ich sie hier beantwortet: https://stackoverflow.com/a/58965526/1909708
XmlHttpRequest
dir meinen? Oder nur ein einfacher HTML-FORM-Beitrag?