Answers:
无法完成-AFAIK。
但是,您可以使用例如jquery(尽管您可以使用普通的javascript做到)来序列化表单并发送(使用AJAX),同时添加自定义标头。
查看serialize
将HTML FORM更改form-url-encoded
为可用于POST的值的jquery 。
我的建议是包括
实际上,这样做的一种更好的方法是在客户端保存cookie。然后,该Cookie随该特定域的每个页面标题一起自动发送。
在node-js中,您可以通过cookie-parser设置和使用cookie 。
一个例子:
res.cookie('token', "xyz....", { httpOnly: true });
现在您可以访问:
app.get('/',function(req, res){
var token = req.cookies.token
});
请注意,请httpOnly:true
确保通常无法手动或通过JavaScript访问Cookie,并且只有浏览器可以访问它。如果要通过表单发布而不是通过ajax发送一些标头或安全令牌,则在大多数情况下,这可以被认为是一种安全的方法。尽管如果要存储一些敏感的用户相关信息(通常是这种情况),请确保通过安全协议/ ssl发送数据。
这是我在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
如果您将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 FORM帖子?