¿Cómo puedo configurar un campo personalizado en el encabezado POST al enviar un formulario?
¿Cómo puedo configurar un campo personalizado en el encabezado POST al enviar un formulario?
Respuestas:
No se puede hacer - AFAIK.
Sin embargo, puede usar, por ejemplo, jquery (aunque puede hacerlo con javascript simple) para serializar el formulario y enviarlo (usando AJAX) mientras agrega su encabezado personalizado.
Mire el jquery serialize
que cambia un FORMATO HTML en form-url-encoded
valores listos para POST.
Mi sugerencia es incluir
Establezca un valor de cookie en la página y luego léalo del lado del servidor.
No podrá establecer un encabezado específico, pero se podrá acceder al valor en la sección de encabezados y no en el cuerpo del contenido.
Desde la documentación de FormData :
XMLHttpRequest Level 2 agrega soporte para la nueva interfaz FormData. Los objetos FormData proporcionan una forma de construir fácilmente un conjunto de pares clave / valor que representan campos de formulario y sus valores, que luego se pueden enviar fácilmente mediante el
XMLHttpRequest
send()
método.
Con un XMLHttpRequest
puede configurar los encabezados personalizados y luego hacer el POST
.
De hecho, una mejor manera de hacerlo es guardar una cookie en el lado del cliente. Luego, la cookie se envía automáticamente con cada encabezado de página para ese dominio en particular.
En node-js, puede configurar y usar cookies con el analizador de cookies .
un ejemplo:
res.cookie('token', "xyz....", { httpOnly: true });
Ahora puedes acceder a esto:
app.get('/',function(req, res){
var token = req.cookies.token
});
Tenga en cuenta que httpOnly:true
garantiza que la cookie no sea generalmente accesible de forma manual o mediante javascript y que solo el navegador pueda acceder a ella. Si desea enviar algunos encabezados o tokens de seguridad con una publicación de formulario, y no a través de ajax, en la mayoría de las situaciones, esto puede considerarse una forma segura. Aunque asegúrese de que los datos se envíen a través de un protocolo seguro / ssl si está almacenando información confidencial relacionada con el usuario, que suele ser el caso.
Esto es lo que hice en 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
Si está usando JQuery con el complemento Form, puede usar:
$('#myForm').ajaxSubmit({
headers: {
"foo": "bar"
}
});
Puede usar $ .ajax para evitar el comportamiento natural de <form method="POST">
. Podría, por ejemplo, agregar un evento al botón de envío y tratar la solicitud POST como AJAX.
Para agregar a cada solicitud de ajax, la he respondido aquí: https://stackoverflow.com/a/58964440/1909708
Para agregar en solicitudes particulares de ajax, así es como implementé:
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"
});
Debe agregar los meta
elementos en la JSP, por ejemplo
<html>
<head>
<!-- default header name is X-CSRF-TOKEN -->
<meta name="_csrf_header" content="${_csrf.headerName}"/>
<meta name="_csrf" content="${_csrf.token}"/>
Para agregar a una solicitud de envío de formulario (sincrónico), la he respondido aquí: https://stackoverflow.com/a/58965526/1909708
XmlHttpRequest
quieres decir? ¿O simplemente una publicación en formato HTML simple?