ฉันจะตั้งค่าฟิลด์ที่กำหนดเองในส่วนหัว POST เมื่อส่งแบบฟอร์มได้อย่างไร
ฉันจะตั้งค่าฟิลด์ที่กำหนดเองในส่วนหัว POST เมื่อส่งแบบฟอร์มได้อย่างไร
คำตอบ:
ไม่สามารถทำได้ - AFAIK
อย่างไรก็ตามคุณสามารถใช้ตัวอย่างเช่น jquery (แม้ว่าคุณสามารถทำได้ด้วย javascript ธรรมดา) เพื่อจัดรูปแบบและส่ง (โดยใช้ AJAX) ในขณะที่เพิ่มส่วนหัวที่กำหนดเองของคุณ
ดู jquery serialize
ซึ่งเปลี่ยนรูปแบบ HTML เป็นform-url-encoded
ค่าพร้อมสำหรับ POST
ข้อเสนอแนะของฉันคือรวมอย่างใดอย่างหนึ่ง
ตั้งค่าคุกกี้บนเพจแล้วอ่านกลับฝั่งเซิร์ฟเวอร์
คุณจะไม่สามารถตั้งค่าส่วนหัวที่เฉพาะเจาะจงได้ แต่ค่านี้จะสามารถเข้าถึงได้ในส่วนส่วนหัวไม่ใช่เนื้อหา
จากเอกสารFormData :
XMLHttpRequest ระดับ 2 เพิ่มการสนับสนุนสำหรับอินเทอร์เฟซ FormData ใหม่ ออบเจ็กต์ FormData จัดเตรียมวิธีการสร้างชุดของคู่คีย์ / ค่าที่เป็นตัวแทนของฟิลด์ฟอร์มและค่าได้อย่างง่ายดายซึ่งสามารถส่งได้อย่างง่ายดายโดยใช้
XMLHttpRequest
send()
เมธอด
ด้วยXMLHttpRequest
คุณสามารถตั้งค่าส่วนหัวที่กำหนดเองแล้วทำPOST
.
ในความเป็นจริงเป็นวิธีที่ดีกว่าในการบันทึกคุกกี้ในฝั่งไคลเอ็นต์ จากนั้นคุกกี้จะถูกส่งโดยอัตโนมัติพร้อมทุกส่วนหัวของหน้าสำหรับโดเมนนั้น ๆ
ในโหนด js คุณสามารถตั้งค่าและใช้คุกกี้กับคุกกี้ parser
ตัวอย่าง:
res.cookie('token', "xyz....", { httpOnly: true });
ตอนนี้คุณสามารถเข้าถึงสิ่งนี้:
app.get('/',function(req, res){
var token = req.cookies.token
});
โปรดทราบว่าhttpOnly:true
ตรวจสอบให้แน่ใจว่าโดยปกติคุกกี้ไม่สามารถเข้าถึงได้ด้วยตนเองหรือผ่านทางจาวาสคริปต์และมีเพียงเบราว์เซอร์เท่านั้นที่สามารถเข้าถึงได้ หากคุณต้องการส่งส่วนหัวหรือโทเค็นการรักษาความปลอดภัยบางส่วนด้วยการโพสต์แบบฟอร์มและไม่ต้องผ่าน ajax ในสถานการณ์ส่วนใหญ่วิธีนี้ถือเป็นวิธีที่ปลอดภัย แม้ว่าตรวจสอบให้แน่ใจว่าข้อมูลถูกส่งผ่านโปรโตคอล / ssl ที่ปลอดภัยหากคุณกำลังจัดเก็บข้อมูลที่เกี่ยวข้องกับผู้ใช้ที่ละเอียดอ่อนซึ่งมักจะเป็นเช่นนั้น
นี่คือสิ่งที่ฉันทำในผับ / หยก
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
หากคุณใช้ JQuery พร้อมปลั๊กอิน Form คุณสามารถใช้:
$('#myForm').ajaxSubmit({
headers: {
"foo": "bar"
}
});
คุณสามารถใช้ $ .ajax เพื่อหลีกเลี่ยงพฤติกรรมตามธรรมชาติของ<form method="POST">
. ตัวอย่างเช่นคุณสามารถเพิ่มเหตุการณ์ในปุ่มส่งและปฏิบัติต่อคำขอ POST เป็น AJAX
ในการเพิ่มคำขอของ ajax ทุกรายการฉันได้ตอบไว้ที่นี่: https://stackoverflow.com/a/58964440/1909708
หากต้องการเพิ่มลงในคำขอของ ajax โดยเฉพาะนี่ 'ฉันดำเนินการอย่างไร:
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 เช่น
<html>
<head>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" content="${_csrf.headerName}"/>
<meta name="_csrf" content="${_csrf.token}"/>
ในการเพิ่มคำขอการส่งแบบฟอร์ม (ซิงโครนัส) ฉันได้ตอบที่นี่: https://stackoverflow.com/a/58965526/1909708
XmlHttpRequest
คุณหมายถึง? หรือแค่โพสต์รูปแบบ HTML ธรรมดา?