使用jQuery在AJAX请求中添加标题

我想添加一个自定义头到jQuery的AJAX POST请求。

我试过这个:

$.ajax({ type: 'POST', url: url, headers: { "My-First-Header":"first value", "My-Second-Header":"second value" } //OR //beforeSend: function(xhr) { // xhr.setRequestHeader("My-First-Header", "first value"); // xhr.setRequestHeader("My-Second-Header", "second value"); //} }).done(function(data) { alert(data); }); 

当我发送这个请求,我看着FireBug,我看到这个标题:

选项xxxx / yyyy HTTP / 1.1
主持人:127.0.0.1:6666
用户代理:Mozilla / 5.0(Windows NT 6.1; WOW64; rv:11.0)Gecko / 20100101 Firefox / 11.0
接受:text / html,application / xhtml + xml,application / xml; q = 0.9, / ; q = 0.8
接受语言:fr,fr-fr; q = 0.8,en-us; q = 0.5,en; q = 0.3
Accept-Encoding:gzip,deflate
连接:保持活力
起源:null
访问控制请求方法:POST
访问控制请求标题:my-first-header,my-second-header
Pragma:no-cache
caching控制:无caching

为什么我的自定义标题转到Access-Control-Request-Headers

访问控制请求标题:my-first-header,my-second-header

我期待着一个像这样的标题值:

我的第一个标题:第一个价值
我的第二个标题:第二个值

可能吗?

您在Firefox中看到的不是实际的请求; 请注意,HTTP方法是OPTIONS,而不是POST。 这实际上是浏览器确定是否应该允许跨域AJAX请求的“飞行前”请求:

http://www.w3.org/TR/cors/

飞行前请求中的Access-Control-Request-Headers标题包含实际请求中的标题列表。 然后,服务器将在浏览器提交实际请求之前,报告是否在这个上下文中支持这些头文件。

以下是如何在JQuery Ajax调用中设置请求标题的示例:

 $.ajax({ type: "POST", beforeSend: function(request) { request.setRequestHeader("Authority", authorizationToken); }, url: "entities", data: "json=" + escape(JSON.stringify(createRequestObject)), processData: false, success: function(msg) { $("#results").append("The result =" + StringifyPretty(msg)); } }); 

下面的代码适用于我。 我总是只使用单个括号,它工作正常。 我build议你应该只使用单个括号或只使用双括号,但不要混淆在一起。

 $.ajax({ url: 'YourRestEndPoint', headers: { 'Authorization':'Basic xxxxxxxxxxxxx', 'X_CSRF_TOKEN':'xxxxxxxxxxxxxxxxxxxx', 'Content-Type':'application/json' }, method: 'POST', dataType: 'json', data: YourData, success: function(data){ console.log('succes: '+data); } }); 

希望这回答你的问题…

这就是为什么你不能使用JavaScript创build一个bot,因为你的select仅限于浏览器允许你做的事情。 你不能只是订购一个遵循CORS策略的浏览器(所有已知的浏览器都遵循这个策略),把随机请求发送到其他的来源,并且让你得到简单的回应!

如果您尝试手动编辑某些请求标头(如来自浏览器附带的开发人员工具的origin header ,那么浏览器将拒绝您的编辑,并可能发送预检OPTIONS请求

尝试使用机架gem。 在你的ajax调用中添加头域。