Bagaimana cara mengatur bidang kustom di header POST saat mengirimkan formulir?
Bagaimana cara mengatur bidang kustom di header POST saat mengirimkan formulir?
Jawaban:
Itu tidak bisa dilakukan - AFAIK.
Namun Anda dapat menggunakan misalnya jquery (meskipun Anda dapat melakukannya dengan javascript biasa) untuk membuat serialisasi formulir dan mengirim (menggunakan AJAX) sambil menambahkan tajuk kustom Anda.
Lihat jquery serialize
yang mengubah FORMULIR HTML menjadi form-url-encoded
nilai yang siap untuk POST.
Saran saya adalah memasukkan keduanya
Tetapkan nilai cookie di halaman, lalu baca kembali di sisi server.
Anda tidak akan dapat menyetel tajuk tertentu, tetapi nilainya akan dapat diakses di bagian tajuk dan bukan isi konten.
Dari dokumentasi FormData :
XMLHttpRequest Level 2 menambahkan dukungan untuk antarmuka FormData baru. Objek FormData menyediakan cara untuk dengan mudah membuat satu set pasangan kunci / nilai yang mewakili bidang formulir dan nilainya, yang kemudian dapat dengan mudah dikirim menggunakan
XMLHttpRequest
send()
metode.
Dengan XMLHttpRequest
Anda dapat mengatur tajuk khusus dan kemudian melakukan POST
.
Sebenarnya cara yang lebih baik untuk melakukannya adalah dengan menyimpan cookie di sisi klien. Kemudian cookie secara otomatis dikirim dengan setiap header halaman untuk domain tersebut.
Di node-js, Anda dapat menyiapkan dan menggunakan cookie dengan cookie-parser .
sebuah contoh:
res.cookie('token', "xyz....", { httpOnly: true });
Sekarang Anda dapat mengakses ini:
app.get('/',function(req, res){
var token = req.cookies.token
});
Perhatikan bahwa httpOnly:true
memastikan bahwa cookie biasanya tidak dapat diakses secara manual atau melalui javascript dan hanya browser yang dapat mengaksesnya. Jika Anda ingin mengirim beberapa header atau token keamanan dengan formulir posting, dan tidak melalui ajax, dalam banyak situasi ini dapat dianggap sebagai cara yang aman. Meskipun pastikan bahwa data dikirim melalui protokol aman / ssl jika Anda menyimpan beberapa info terkait pengguna yang sensitif yang biasanya terjadi.
Inilah yang saya lakukan di pub / giok
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
Jika Anda menggunakan JQuery dengan plugin Formulir, Anda dapat menggunakan:
$('#myForm').ajaxSubmit({
headers: {
"foo": "bar"
}
});
Anda dapat menggunakan $ .ajax untuk menghindari perilaku alami <form method="POST">
. Anda dapat, misalnya, menambahkan acara ke tombol pengiriman dan memperlakukan permintaan POST sebagai AJAX.
Untuk menambah setiap permintaan ajax, saya telah menjawabnya di sini: https://stackoverflow.com/a/58964440/1909708
Untuk menambahkan ke dalam permintaan ajax tertentu, ini 'bagaimana saya mengimplementasikan:
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"
});
Anda harus menambahkan meta
elemen di JSP, misalnya
<html>
<head>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" content="${_csrf.headerName}"/>
<meta name="_csrf" content="${_csrf.token}"/>
Untuk menambah permintaan pengiriman formulir (sinkron), saya telah menjawabnya di sini: https://stackoverflow.com/a/58965526/1909708
XmlHttpRequest
maksudmu? Atau hanya posting FORMULIR HTML biasa?