web-dev-qa-db-fra.com

Comment définir un champ d'en-tête sur POST une forme?

Comment définir un champ personnalisé dans l'en-tête POST lors de l'envoi d'un formulaire?

72
Reza Owliaei

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.

METTRE À JOUR

Ma suggestion est d'inclure soit 

  • un élément de formulaire caché 
  • un paramètre de chaîne de requête
50
Aliostad

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.

13
Chris Hynes

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 XMLHttpRequestsend().

Avec une XMLHttpRequest, vous pouvez définir les en-têtes personnalisés, puis créer la POST.

3
Majid

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. 

2
Ramesh Pareek

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
1
Steve

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.

0
Fabio Buda