Jak mogę ustawić niestandardowe pole w nagłówku POST podczas przesyłania formularza?
javascript
html
post
http-post
httprequest
Reza Owliaei
źródło
źródło
XmlHttpRequest
masz na myśli? A może zwykły post w formacie HTML?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 naform-url-encoded
wartości gotowe do POST.AKTUALIZACJA
Proponuję uwzględnić jedno i drugie
źródło
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.
źródło
Z dokumentacji FormData :
Za pomocą
XMLHttpRequest
możesz ustawić niestandardowe nagłówki, a następnie wykonaćPOST
.źródło
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.źródło
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
źródło
Jeśli używasz JQuery z wtyczką Form, możesz użyć:
$('#myForm').ajaxSubmit({ headers: { "foo": "bar" } });
Źródło: https://stackoverflow.com/a/31955515/9469069
źródło
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.źródło
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
źródło