Ajax与REST客户端

时间:2014-03-25 15:10:10

标签: jquery ajax rest

我正在尝试使用AJAX执行POST:

<script>
$(document).ready(function(){
  $.ajax({
    type: 'POST',
    beforeSend: function(xhr) {xhr.setRequestHeader("x-csrf-token",'oECpabcdefco4DFY+LEbetabcdefgD0REBOzk=')},
    crossDomain: true,
    url: 'http://0.0.0.0:3040/users/gmail_permission/',
    data: ({'gmail':'email@gmail.com','id':'49'}),
  });
});
</script>

我收到错误

 Request header field x-csrf-token is not allowed by Access-Control-Allow-Headers.

但是当我使用REST客户端(进行调试/测试)时,帖子没有问题。这是为什么?我看不出x-csrf-token是如何在REST客户端上出现问题但是我的AJAX POST出了问题?

2 个答案:

答案 0 :(得分:0)

请参阅http://enable-cors.org作为有关CORS的良好资源。

跨源资源共享是服务器(在本例中为google)允许其他网站跨域发出请求的方式。例如,如果用户默认登录到其银行帐户,则您不希望任何网站向bank.com发出ajax GET请求并查看用户看到的内容。服务器使CORS成为一种优势,因此API是公共的,免费的。

但是,这些服务器(例如google api)只允许标题的子集通过。请参阅此处的文档:https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS#Access-Control-Allow-Headers

谷歌在这种情况下已选择禁止&#34; x-csrf-token&#34;在基于浏览器的ajax调用中。

看起来这个API并不是要从客户端调用。此外,您在浏览器中向用户公开您的PRIVATE api密钥!别这么做!此API仅用于从服务器端调用。


编辑:我发现你实际上正在对你自己的服务器进行ajax调用,而不是直接对谷歌进行调用。您需要在服务器上启用x-csrf-token访问控制。在此列表中找到您正在使用的服务器,然后按照以下步骤操作:http://enable-cors.org/server.html

答案 1 :(得分:0)

在.htaccess中检查以允许标头中的X-CSRF-Token。像这样:

    Header add Access-Control-Allow-Headers "origin, content-type,X-Requested-With, X-CSRF-Token"