你在Firefox中看到的不是实际的要求;请注意,HTTP方法是OPTIONS,而不是POST。这实际上是浏览器确定是否应允许跨域AJAX请求的“飞行前”请求:
http://www.w3.org/TR/cors/
飞行前请求中的Access-Control-Request-Headers标头包括实际请求中的标头列表。然后,在浏览器提交实际请求之前,服务器将报告是否在此上下文中支持这些标头。
尝试使用 机架CORS 宝石。并在ajax调用中添加标头字段。
以下是如何在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)); } });
这就是为什么你不能用Javascript创建机器人,因为你的选择仅限于浏览器允许你做的事情。你不能只订购跟随的浏览器 CORS 大多数浏览器遵循的策略是将随机请求发送到其他来源,并允许您简单地获得响应!
CORS
此外,如果您尝试手动编辑某些请求标头,例如 origin-header 从浏览器附带的开发人员工具中,浏览器将拒绝您的编辑,并可能发送预检 OPTIONS 请求。
origin-header
OPTIONS
以下代码适用于我。我总是只使用单引号,它工作正常。我建议你应该只使用单引号或仅使用双引号,但不能混淆。
$.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); } });
希望这能回答你的问题......