Form gönderirken POST başlığında özel bir alanı nasıl ayarlayabilirim?
Form gönderirken POST başlığında özel bir alanı nasıl ayarlayabilirim?
Yanıtlar:
Yapılamaz - AFAIK.
Bununla birlikte, formu serileştirmek ve özel başlığınızı eklerken göndermek (AJAX kullanarak) için örneğin jquery kullanabilirsiniz (bunu düz javascript ile yapabilirsiniz).
Jquery bak serialize
içine bir HTML FORM değiştirir form-url-encoded
POST hazır değerler.
Benim önerim ikisini de dahil etmek
Sayfada bir çerez değeri ayarlayın ve ardından sunucu tarafında geri okuyun.
Belirli bir başlık ayarlayamazsınız, ancak değere içerik gövdesinden değil başlıklar bölümünden erişilebilir.
Gönderen FormData documention:
XMLHttpRequest Düzey 2, yeni FormData arabirimi için destek ekler. FormData nesneleri, form alanlarını ve değerlerini temsil eden bir anahtar / değer çifti kümesini kolayca oluşturmanın bir yolunu sağlar ve bunlar daha sonra
XMLHttpRequest
send()
yöntem kullanılarak kolayca gönderilebilir .
Bir ile XMLHttpRequest
özel üstbilgileri ayarlayabilir ve ardından POST
.
Aslında bunu istemci tarafında bir çerez kaydetmenin daha iyi bir yolu. Daha sonra, söz konusu etki alanı için her sayfa başlığıyla birlikte çerez otomatik olarak gönderilir.
Node-js'de, çerez ayrıştırıcı ile çerezler kurabilir ve kullanabilirsiniz .
Bir örnek:
res.cookie('token', "xyz....", { httpOnly: true });
Şimdi buna erişebilirsiniz:
app.get('/',function(req, res){
var token = req.cookies.token
});
Not o httpOnly:true
çerez genellikle erişilebilir elle veya javascript ile erişilebildiği ve tek tarayıcı olmasını sağlar. Bazı başlıkları veya güvenlik belirteçlerini ajax aracılığıyla değil, bir form gönderisiyle göndermek istiyorsanız, çoğu durumda bu güvenli bir yol olarak kabul edilebilir. Bununla birlikte, genellikle durum olan, kullanıcıyla ilgili bazı hassas bilgileri depoluyorsanız, verilerin güvenli protokol / SSL üzerinden gönderildiğinden emin olun.
İşte pub / jade'de yaptığım şey
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
Form eklentisi ile JQuery kullanıyorsanız şunları kullanabilirsiniz:
$('#myForm').ajaxSubmit({
headers: {
"foo": "bar"
}
});
$ .Ajax komutunun doğal davranışından kaçınmak için kullanabilirsiniz <form method="POST">
. Örneğin, gönderim düğmesine bir olay ekleyebilir ve POST isteğini AJAX olarak değerlendirebilirsiniz.
Her ajax isteğine eklemek için burada yanıtladım: https://stackoverflow.com/a/58964440/1909708
Belirli ajax isteklerine eklemek için, şu şekilde uyguladım:
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"
});
meta
JSP'ye öğeleri eklemelisiniz , örneğin
<html>
<head>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" content="${_csrf.headerName}"/>
<meta name="_csrf" content="${_csrf.token}"/>
Bir form gönderme (eşzamanlı) isteğine eklemek için, onu burada yanıtladım: https://stackoverflow.com/a/58965526/1909708
XmlHttpRequest
yani? Yoksa sadece düz bir HTML FORM yazısı mı?