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


Answers:


60

无法完成-AFAIK。

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

查看serialize将HTML FORM更改form-url-encoded为可用于POST的值的jquery 。

更新

我的建议是包括

  • 隐藏的表单元素
  • 查询字符串参数

2
在这种情况下,我不能使用ajax。不知何故,我发布并重定向到一个aspx页面。重定向是通过发件人进行的。
Reza Owliaei 2012年

2
我的建议是包括以下任何一项:1)隐藏的表单元素2)查询字符串参数
Aliostad 2012年

1
您可以序列化文件吗?我想:第
Fallenreaper

是的,您可以将文件序列化为Base64字符串,对于大型文件来说可能很笨拙,因为Base64可能非常庞大。但是每种序列化方法也是如此。
Felype 2015年

我只是将其添加为查询字符串参数,并让您的服务器检查是否存在标头或查询字符串并具有令牌。
James111 '16

14

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

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


3
注:如果您要添加的标题是CSRF保护,确保你没有该标记存储在cookie中,否则你会打败CSRF保护。
Jimothy

5

FormData文档:

XMLHttpRequest级别2增加了对新FormData接口的支持。FormData对象提供了一种轻松构造一组代表表单字段及其值的键/值对的XMLHttpRequest send()方法,然后可以使用该方法轻松发送该键/值对。

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


2

实际上,这样做的一种更好的方法是在客户端保存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发送数据。


1

这是我在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


0

您可以使用$ .ajax来避免的自然行为<form method="POST">。例如,您可以将事件添加到提交按钮,并将POST请求视为AJAX。


2
我使用此表单提交重定向到aspx页面并发布一些数据。
Reza Owliaei 2012年

让我更好地理解:1)用户帖子2)保存数据3)重定向。是你干嘛
法比奥·布达

我在HTML页面(源)中有一个iFrame,指向另一个HTML页面(代理)。代理页面通过表单元素发布一些参数(无获取)。重定向和发布发生在表单提交上。我在aspx页面中检索发布的参数作为目标。
Reza Owliaei 2012年

0

要添加到每个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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.