Как я могу установить настраиваемое поле в заголовке POST при отправке формы?
Как я могу установить настраиваемое поле в заголовке POST при отправке формы?
Ответы:
Это невозможно сделать - AFAIK.
Однако вы можете использовать, например, jquery (хотя вы можете сделать это с помощью простого javascript) для сериализации формы и отправки (с использованием AJAX) при добавлении собственного заголовка.
Посмотрите на jquery, serialize
который изменяет HTML-ФОРМУ на form-url-encoded
значения, готовые для POST.
Я предлагаю включить либо
Установите значение cookie на странице, а затем прочтите его на стороне сервера.
Вы не сможете установить конкретный заголовок, но значение будет доступно в разделе заголовков, а не в теле содержимого.
Из документа FormData :
XMLHttpRequest Level 2 добавляет поддержку нового интерфейса FormData. Объекты FormData предоставляют способ легко создать набор пар ключ / значение, представляющих поля формы и их значения, которые затем можно легко отправить с помощью этого
XMLHttpRequest
send()
метода.
С помощью XMLHttpRequest
вы можете установить пользовательские заголовки, а затем сделать POST
.
Фактически, лучший способ сделать это - сохранить куки на стороне клиента. Затем файл cookie автоматически отправляется с каждым заголовком страницы для этого конкретного домена.
В node-js вы можете настроить и использовать файлы cookie с помощью cookie-parser .
пример:
res.cookie('token', "xyz....", { httpOnly: true });
Теперь вы можете получить доступ к этому:
app.get('/',function(req, res){
var token = req.cookies.token
});
Обратите внимание, что это httpOnly:true
гарантирует, что файл cookie обычно недоступен вручную или через javascript, и только браузер может получить к нему доступ. Если вы хотите отправить некоторые заголовки или токены безопасности в форме сообщения, а не через 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?