web-dev-qa-db-de.com

So setzen Sie ein Header-Feld auf POST eine Form?

Wie kann ich beim Senden eines Formulars ein benutzerdefiniertes Feld im POST - Header festlegen?

72
Reza Owliaei

Das geht nicht - AFAIK.

Sie können jedoch beispielsweise jquery verwenden (obwohl Sie es mit einfachem Javascript tun können), um das Formular zu serialisieren und (mit AJAX) zu senden, während Sie Ihren benutzerdefinierten Header hinzufügen.

Schauen Sie sich die Jquery serialize an, die ein HTML-FORM in form-url-encoded-Werte ändert, die für den POST bereit sind.

AKTUALISIEREN

Mein Vorschlag ist, entweder aufzunehmen 

  • ein verstecktes Formularelement 
  • ein Abfragezeichenfolgeparameter
50
Aliostad

Legen Sie einen Cookie-Wert auf der Seite fest und lesen Sie ihn auf der Serverseite zurück.

Es ist nicht möglich, einen bestimmten Header festzulegen, aber der Wert ist im Headerbereich und nicht im Inhaltstext verfügbar.

13
Chris Hynes

Aus FormData Dokumentation: 

XMLHttpRequest Level 2 fügt Unterstützung für die neue FormData-Schnittstelle hinzu. FormData-Objekte bieten eine Möglichkeit, auf einfache Weise eine Gruppe von Schlüssel/Wert-Paaren zu erstellen, die Formularfelder und deren Werte darstellen, die dann mit der XMLHttpRequestsend()-Methode problemlos gesendet werden können.

Mit einer XMLHttpRequest können Sie die benutzerdefinierten Header festlegen und dann die POST ausführen.

3
Majid

Tatsächlich ist es eine bessere Möglichkeit, ein Cookie auf der Clientseite zu speichern. Dann wird der Cookie automatisch mit jedem Seitenheader für diese bestimmte Domain gesendet. In node-js können Sie beispielsweise ein Cookie auf folgende Weise setzen: 

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 sicherstellt, dass auf das Cookie normalerweise nicht manuell oder über Javascript zugegriffen werden kann und nur der Browser darauf zugreifen kann ..__ Wenn Sie Kopfzeilen oder Sicherheitstoken mit einem Formularpost und nicht über Ajax senden möchten, ist dies in den meisten Fällen möglich als sicherer Weg betrachtet 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. 

2
Ramesh Pareek

Hier ist was ich in Kneipe/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
1
Steve

Sie können $ .ajax verwenden, um das natürliche Verhalten von <form method="POST">..__ zu vermeiden. Sie können beispielsweise der Übermittlungsschaltfläche ein Ereignis hinzufügen und die Anforderung POST als AJAX behandeln.

0
Fabio Buda