Làm cách nào để đặt trường tùy chỉnh trong tiêu đề ĐĂNG khi gửi biểu mẫu?
Làm cách nào để đặt trường tùy chỉnh trong tiêu đề ĐĂNG khi gửi biểu mẫu?
Câu trả lời:
Nó không thể được thực hiện - AFAIK.
Tuy nhiên, bạn có thể sử dụng jquery ví dụ (mặc dù bạn có thể làm điều đó với javascript thuần túy) để tuần tự hóa biểu mẫu và gửi (sử dụng AJAX) trong khi thêm tiêu đề tùy chỉnh của bạn.
Nhìn vào jquery serialize
thay đổi một BIỂU MẪU HTML thành form-url-encoded
các giá trị sẵn sàng cho ĐĂNG.
Đề xuất của tôi là bao gồm một trong hai
Đặt giá trị cookie trên trang, sau đó đọc lại phía máy chủ.
Bạn sẽ không thể đặt một tiêu đề cụ thể, nhưng giá trị sẽ có thể truy cập được trong phần tiêu đề chứ không phải nội dung.
Từ tài liệu FormData :
XMLHttpRequest Mức 2 bổ sung hỗ trợ cho giao diện FormData mới. Các đối tượng FormData cung cấp một cách để dễ dàng xây dựng một tập hợp các cặp khóa / giá trị đại diện cho các trường biểu mẫu và giá trị của chúng, sau đó có thể dễ dàng gửi đi bằng
XMLHttpRequest
send()
phương thức này.
Với một, XMLHttpRequest
bạn có thể đặt các tiêu đề tùy chỉnh và sau đó thực hiện POST
.
Trên thực tế, một cách tốt hơn để làm điều đó là lưu cookie ở phía máy khách. Sau đó, cookie sẽ tự động được gửi với mọi tiêu đề trang cho tên miền cụ thể đó.
Trong node-js, bạn có thể thiết lập và sử dụng cookie với cookie-parser .
một ví dụ:
res.cookie('token', "xyz....", { httpOnly: true });
Bây giờ bạn có thể truy cập vào cái này:
app.get('/',function(req, res){
var token = req.cookies.token
});
Lưu ý rằng httpOnly:true
đảm bảo rằng cookie thường không thể truy cập theo cách thủ công hoặc thông qua javascript và chỉ có trình duyệt mới có thể truy cập nó. Nếu bạn muốn gửi một số tiêu đề hoặc mã thông báo bảo mật bằng một bài đăng trên biểu mẫu mà không phải thông qua ajax, trong hầu hết các tình huống, đây có thể được coi là một cách an toàn. Mặc dù hãy đảm bảo rằng dữ liệu được gửi qua giao thức an toàn / ssl nếu bạn đang lưu trữ một số thông tin nhạy cảm liên quan đến người dùng, điều này thường xảy ra.
Đây là những gì tôi đã làm trong 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
Nếu bạn đang sử dụng JQuery với plugin Biểu mẫu, bạn có thể sử dụng:
$('#myForm').ajaxSubmit({
headers: {
"foo": "bar"
}
});
Bạn có thể sử dụng $ .ajax để tránh các hành vi tự nhiên của <form method="POST">
. Ví dụ: bạn có thể thêm một sự kiện vào nút gửi và coi yêu cầu ĐĂNG là AJAX.
Để thêm vào mọi yêu cầu ajax, tôi đã trả lời nó tại đây: https://stackoverflow.com/a/58964440/1909708
Để thêm vào các yêu cầu ajax cụ thể, đây là cách tôi đã triển khai:
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"
});
Bạn phải thêm các meta
phần tử trong JSP, ví dụ:
<html>
<head>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" content="${_csrf.headerName}"/>
<meta name="_csrf" content="${_csrf.token}"/>
Để thêm vào yêu cầu gửi biểu mẫu (đồng bộ), tôi đã trả lời yêu cầu đó tại đây: https://stackoverflow.com/a/58965526/1909708
XmlHttpRequest
có nghĩa là? Hay chỉ là một bài đăng dạng HTML thuần túy?