Jak mogę ustawić niestandardowe pole w nagłówku POST podczas przesyłania formularza?
Jak mogę ustawić niestandardowe pole w nagłówku POST podczas przesyłania formularza?
Odpowiedzi:
Nie da się tego zrobić - AFAIK.
Możesz jednak użyć na przykład jquery (chociaż możesz to zrobić za pomocą zwykłego javascript), aby serializować formularz i wysłać (za pomocą AJAX) podczas dodawania niestandardowego nagłówka.
Spójrz na jquery, serialize
które zmienia FORMULARZ HTML na form-url-encoded
wartości gotowe do POST.
Proponuję uwzględnić jedno i drugie
Ustaw wartość pliku cookie na stronie, a następnie przeczytaj ją po stronie serwera.
Nie będzie można ustawić określonego nagłówka, ale wartość będzie dostępna w sekcji nagłówków, a nie w treści.
Z dokumentacji FormData :
XMLHttpRequest Level 2 dodaje obsługę nowego interfejsu FormData. Obiekty FormData umożliwiają łatwe tworzenie zestawu par klucz / wartość reprezentujących pola formularza i ich wartości, które można następnie łatwo wysłać za pomocą
XMLHttpRequest
send()
metody.
Za pomocą XMLHttpRequest
możesz ustawić niestandardowe nagłówki, a następnie wykonać POST
.
W rzeczywistości lepszy sposób, aby to zrobić, aby zapisać plik cookie po stronie klienta. Następnie plik cookie jest automatycznie wysyłany z każdym nagłówkiem strony dla tej konkretnej domeny.
W node-js możesz skonfigurować pliki cookie i używać ich z parserem plików cookie .
przykład:
res.cookie('token', "xyz....", { httpOnly: true });
Teraz możesz uzyskać dostęp do tego:
app.get('/',function(req, res){
var token = req.cookies.token
});
Należy pamiętać, że httpOnly:true
zapewnia to, że plik cookie nie jest zwykle dostępny ręcznie lub przez JavaScript i tylko przeglądarka ma do niego dostęp. Jeśli chcesz wysłać jakieś nagłówki lub tokeny bezpieczeństwa z postem formularza, a nie przez AJAX, w większości sytuacji można to uznać za bezpieczny sposób. Chociaż upewnij się, że dane są przesyłane przez bezpieczny protokół / ssl, jeśli przechowujesz poufne informacje dotyczące użytkownika, co zwykle ma miejsce.
Oto, co zrobiłem w 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
Jeśli używasz JQuery z wtyczką Form, możesz użyć:
$('#myForm').ajaxSubmit({
headers: {
"foo": "bar"
}
});
Możesz użyć $ .ajax, aby uniknąć naturalnego zachowania <form method="POST">
. Możesz na przykład dodać zdarzenie do przycisku przesyłania i traktować żądanie POST jako AJAX.
Aby dodać do każdego żądania AJAX, odpowiedziałem na to tutaj: https://stackoverflow.com/a/58964440/1909708
Aby dodać do poszczególnych żądań Ajax, oto jak zaimplementowałem:
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"
});
Musisz dodać meta
elementy w JSP, np
<html>
<head>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" content="${_csrf.headerName}"/>
<meta name="_csrf" content="${_csrf.token}"/>
Aby dodać do żądania przesłania formularza (synchroniczne), odpowiedziałem na to tutaj: https://stackoverflow.com/a/58965526/1909708
XmlHttpRequest
masz na myśli? A może zwykły post w formacie HTML?