Javascript 如何在POST表单上设置标题字段?

Javascript 如何在POST表单上设置标题字段?,javascript,html,post,http-post,httprequest,Javascript,Html,Post,Http Post,Httprequest,如何在提交表单时在帖子标题中设置自定义字段?无法完成-AFAIK 但是,您可以使用例如jquery(尽管可以使用普通javascript)来序列化表单并发送(使用AJAX),同时添加自定义头 查看jquery,它将HTML表单更改为表单url编码的值,以备发布 更新 我的建议是包括这两项 隐藏的表单元素 查询字符串参数 您可以使用$.ajax来避免的自然行为。 例如,您可以向submission按钮添加一个事件,并将POST请求视为AJAX。在页面上设置一个cookie值,然后将其读回服务器端

如何在提交表单时在帖子标题中设置自定义字段?

无法完成-AFAIK

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

查看jquery,它将HTML表单更改为
表单url编码的值,以备发布

更新
我的建议是包括这两项

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

您可以使用$.ajax来避免
的自然行为。
例如,您可以向submission按钮添加一个事件,并将POST请求视为AJAX。

在页面上设置一个cookie值,然后将其读回服务器端

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

来自文档:

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


使用
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
扩展布局
块内容
脚本(src=“/jquery/dist/jquery.js”)
剧本
函数doThePost(){
var jqXHR=$.ajax({
类型:'post'
,网址:
,标题:{
“x-custom1”:“blabla”
,“x-custom2”:“blabla”
,“内容类型”:“应用程序/json”
}
,数据:{
“id”:123456,布拉布拉
}
})
.done(函数(数据、状态、请求){console.log(“done”,数据、状态、请求);})
.fail(函数(req,status,err){console.log(“fail”,req,status,err);});
}
h1=标题
按钮(onclick='doThePost()')单击

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

在node js中,您可以设置并使用cookie

例如:

res.cookie('token', "xyz....", { httpOnly: true });
现在您可以访问以下内容:

app.get('/',function(req, res){
 var token = req.cookies.token
});
请注意,
httpOnly:true
确保通常无法手动或通过javascript访问cookie,并且只有浏览器才能访问cookie。
如果您希望通过表单post而不是通过ajax发送一些头或安全令牌,在大多数情况下,这可以被认为是一种安全的方式。但是,如果您存储的是一些敏感的用户相关信息(通常情况下),请确保通过安全协议/ssl发送数据

要添加到每个ajax请求中,我在这里回答了它:


要添加到特定的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}"/>


要添加到表单提交(同步)请求中,我已在此处回答:

如果您将JQuery与表单插件一起使用,您可以使用:

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

来源:

使用
XmlHttpRequest
你的意思是?或者只是一个普通的HTML表单帖子?不,我使用的是表单操作:在这种情况下,我不能使用ajax。不知怎的,我发布并重定向到一个aspx页面。重定向是通过发帖实现的。我的建议是包括1)隐藏的表单元素2)查询字符串参数能否序列化文件?我想:不。是的,您可以将文件序列化为Base64字符串,对于大型文件来说可能非常笨拙,因为Base64可能非常庞大。但每个序列化方法也是如此。我只想将其添加为查询字符串param&让您的服务器检查头或查询字符串是否存在,以及是否有令牌。我使用此表单提交重定向到aspx页面并发布一些数据。让我更好地理解:1)用户发布2)保存数据3)重定向。这就是你要做的吗?我在一个Html页面(源)中有一个iFrame,指向另一个Html页面(代理)。代理页面通过表单元素发布一些参数(无Get)。表单提交时发生重定向和发布。我在aspx页面中检索已发布的参数作为目标。注意:如果要添加的标题用于CSRF保护,请确保不要将该令牌存储在cookie中,否则会破坏CSRF保护。