Comment définir un champ personnalisé dans l'en-tête POST lors de l'envoi d'un formulaire?
Cela ne peut pas être fait - autant que je sache.
Cependant, vous pouvez utiliser par exemple jquery (bien que vous puissiez le faire avec du javascript simple) pour sérialiser le formulaire et l'envoyer (avec AJAX) tout en ajoutant votre en-tête personnalisé.
Regardez jquery serialize
qui modifie un HTML Form en form-url-encoded
valeurs prêtes pour le POST.
Ma suggestion est d'inclure soit
Définissez une valeur de cookie sur la page, puis relisez-la côté serveur.
Vous ne pourrez pas définir un en-tête spécifique, mais la valeur sera accessible dans la section des en-têtes et non dans le corps du contenu.
De FormData documention:
XMLHttpRequest Level 2 ajoute la prise en charge de la nouvelle interface FormData. Les objets FormData permettent de construire facilement un ensemble de paires clé/valeur représentant les champs de formulaire et leurs valeurs, qui peuvent ensuite être facilement envoyées à l'aide de la méthode
XMLHttpRequest
send()
.
Avec une XMLHttpRequest
, vous pouvez définir les en-têtes personnalisés, puis créer la POST
.
En fait, une meilleure façon de le faire pour enregistrer un cookie côté client. Ensuite, le cookie est automatiquement envoyé avec chaque en-tête de page pour ce domaine particulier. Par exemple, dans node-js, vous pouvez définir un cookie comme suit:
res.cookie('token', "xyz....", { httpOnly: true });
Maintenant, vous pouvez accéder à ceci:
app.get('/',function(req, res){
var token = req.cookies.token
});
Notez que httpOnly:true
garantit que le cookie n'est généralement pas accessible manuellement ou javascript et que seul le navigateur peut y accéder . Si vous souhaitez envoyer des en-têtes ou des jetons de sécurité avec une publication de formulaire, et non via ajax, cela être considéré comme un moyen sûr. Assurez-vous toutefois que les données sont envoyées via protocole sécurisé/ssl si vous stockez des informations confidentielles relatives à l'utilisateur, ce qui est généralement le cas.
Voici ce que j'ai fait dans pub/jade
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
Vous pouvez utiliser $ .ajax pour éviter le comportement naturel de <form method="POST">
. Vous pouvez par exemple ajouter un événement au bouton de soumission et traiter la demande POST comme étant AJAX.