Come impostare un campo di intestazione su POST un modulo?


Risposte:


60

Non si può fare - AFAIK.

Tuttavia puoi usare ad esempio jquery (sebbene tu possa farlo con semplice javascript) per serializzare il modulo e inviarlo (usando AJAX) mentre aggiungi la tua intestazione personalizzata.

Guarda il jquery serializeche cambia un FORM HTML in form-url-encodedvalori pronti per il POST.

AGGIORNARE

Il mio suggerimento è di includere entrambi

  • un elemento di forma nascosto
  • un parametro della stringa di query

2
Non posso usare ajax in questo caso. In qualche modo, sto postando e reindirizzando a una pagina aspx. Il reindirizzamento viene eseguito da From Post.
Reza Owliaei

2
Il mio suggerimento è di includere 1) un elemento del modulo nascosto 2) un parametro della stringa di query
Aliostad

1
Potete serializzare i file? Ho pensato: No.
Fallenreaper

Sì, puoi serializzare i file in stringhe Base64, forse molto goffo per file enormi poiché Base64 può essere piuttosto ingombrante. Ma lo è anche ogni metodo di serializzazione.
Felype

Lo aggiungerei semplicemente come parametro della stringa di query e chiedo al tuo server di controllare se esiste un'intestazione o una stringa di query e ha il token.
James111

14

Imposta un valore per il cookie sulla pagina, quindi leggilo sul lato server.

Non sarai in grado di impostare un'intestazione specifica, ma il valore sarà accessibile nella sezione delle intestazioni e non nel corpo del contenuto.


3
Nota: se l'intestazione che desideri aggiungere è per la protezione CSRF, assicurati di non memorizzare quel token in un cookie, altrimenti annullerai la protezione CSRF.
Jimothy

5

Dalla documentazione di FormData :

XMLHttpRequest Livello 2 aggiunge il supporto per la nuova interfaccia FormData. Gli oggetti FormData forniscono un modo per costruire facilmente un set di coppie chiave / valore che rappresentano i campi del modulo ei loro valori, che possono quindi essere facilmente inviati utilizzando il XMLHttpRequest send()metodo.

Con un XMLHttpRequestè possibile impostare le intestazioni personalizzate e quindi eseguire il POST.


2

In effetti, un modo migliore per farlo è salvare un cookie sul lato client. Quindi il cookie viene inviato automaticamente con ogni intestazione di pagina per quel particolare dominio.

In node-js, puoi impostare e utilizzare i cookie con cookie-parser .

un esempio:

res.cookie('token', "xyz....", { httpOnly: true });

Ora puoi accedere a questo:

app.get('/',function(req, res){
 var token = req.cookies.token
});

Si noti che httpOnly:truegarantisce che il cookie di solito non è accessibile manualmente o tramite javascript e solo il browser può accedervi. Se vuoi inviare alcune intestazioni o token di sicurezza con un modulo post, e non tramite ajax, nella maggior parte delle situazioni questo può essere considerato un modo sicuro. Anche se assicurati che i dati vengano inviati tramite protocollo sicuro / ssl se stai memorizzando alcune informazioni sensibili relative agli utenti, come di solito è il caso.


1

Ecco cosa ho fatto in 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


0

Puoi usare $ .ajax per evitare il comportamento naturale di <form method="POST">. Ad esempio, potresti aggiungere un evento al pulsante di invio e trattare la richiesta POST come AJAX.


2
Uso questo modulo di invio per reindirizzare a una pagina aspx e inserire alcuni dati.
Reza Owliaei

fammi capire meglio: 1) post degli utenti 2) salvataggio dei dati 3) reindirizzamento. È quello che fai?
Fabio Buda

Ho un iFrame in una pagina Html (sorgente), che punta a un'altra pagina html (proxy). La pagina proxy pubblica alcuni parametri (No Get) tramite un elemento del modulo. Il reindirizzamento e il post avvengono durante l'invio del modulo. Recupero i parametri pubblicati nella pagina aspx come destinazione.
Reza Owliaei

0

Per aggiungere a ogni richiesta ajax, ho risposto qui: https://stackoverflow.com/a/58964440/1909708


Per aggiungere in particolari richieste ajax, ecco come ho implementato:

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"
});

È necessario aggiungere gli metaelementi nel JSP, ad es

<html>
<head>        
    <!-- default header name is X-CSRF-TOKEN -->
    <meta name="_csrf_header" content="${_csrf.headerName}"/>
    <meta name="_csrf" content="${_csrf.token}"/>

Per aggiungere a una richiesta di invio del modulo (sincrona), ho risposto qui: https://stackoverflow.com/a/58965526/1909708

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.