如何在 POST 表单上设置 Header 字段?

如何在提交表单时在 POST 头中设置自定义字段?

229256 次浏览

它不能做-AFAIK。

然而,您可以使用例如 jquery (尽管您可以使用普通的 javascript)来序列化表单并发送(使用 AJAX) ,同时添加您的自定义头。

查看一下 jquery serialize,它将 HTML 表单更改为可用于 POST 的 form-url-encoded值。

更新

我的建议是把两者都包括进来

  • a hidden form element
  • 查询字符串参数

You could use $.ajax to avoid the natural behaviour of <form method="POST">. You could, for example, add an event to the submission button and treat the POST request as AJAX.

在页面上设置 Cookie 值,然后将其读回服务器端。

您将无法设置特定的标题,但是值将在标题部分而不是内容主体中可访问。

来自 表格数据文档:

XMLHttpRequest Level 2 adds support for the new FormData interface. FormData objects provide a way to easily construct a set of key/value pairs representing form fields and their values, which can then be easily sent using the XMLHttpRequest send() method.

使用 XMLHttpRequest,您可以设置自定义标头,然后执行 POST

下面是我在 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

事实上,在客户端保存 cookie 是一种更好的方法。然后 Cookie 会自动与该特定域的每个页眉一起发送。

在 node-js 中,可以设置和使用带有 cookie-parser的 cookie。

例如:

res.cookie('token', "xyz....", { httpOnly: true });

现在你可以访问这个:

app.get('/',function(req, res){
var token = req.cookies.token
});

Note that httpOnly:true ensures that the cookie is usually not accessible manually or through javascript and only browser can access it. 如果您希望通过表单发送而不是通过 ajax 发送一些标头或安全令牌,那么在大多数情况下,这可以被认为是一种安全的方法。不过,如果您存储了一些敏感的用户相关信息(通常都是这种情况) ,请确保数据是通过安全协议/ssl 发送的。

为了添加到每个 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"
});

您必须在 JSP 中添加 meta元素,例如。

<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

如果您使用的是带有 Form 插件的 JQuery,您可以使用:

$('#myForm').ajaxSubmit({
headers: {
"foo": "bar"
}
});

资料来源: https://stackoverflow.com/a/31955515/9469069