由CORS阻止的对Sinatra应用程序的JQuery AJAX请求

时间:2013-06-10 15:11:39

标签: jquery ajax cross-domain sinatra cors

我一直在努力解决这个问题。我相信我已经解决了这个问题,但是看,它又出现了。

这是我在localhost中的问题:

OPTIONS http://my.server.com/authorize Origin http://localhost is not allowed by Access-Control-Allow-Origin. jquery-1.8.2.min.js:2
XMLHttpRequest cannot load http://my.server.com/authorize. Origin http://localhost is not allowed by Access-Control-Allow-Origin. 

我正在尝试从客户端向我的Sinatra应用程序发出请求。我的客户端代码如下:

function authorize(token)
{
  $.ajax({
    url: "http://my.server.com/authorize/authorize",
    crossDomain: "true",
    jsonp: "false",
    async: true,
    headers: {"Authorization" : token},
    success: function(data){
      console.log("success");
      window.location = (envHost+"/fb/authenticate");
    }
  });
}

在我的Sinatra应用程序中,我努力启用CORS。我尝试了以下两种方式:

options '/*' do
  headers['Access-Control-Allow-Origin'] = "*"
  headers['Access-Control-Allow-Methods'] = "GET, POST, PUT, DELETE, OPTIONS"
  headers['Access-Control-Allow-Headers'] ="accept, authorization, origin"
end

before do  
  headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, DELETE, OPTIONS'
  headers['Access-Control-Allow-Origin'] = '*'
  headers['Access-Control-Allow-Headers'] = 'accept, authorization, origin'
end

即使在我的Apache Passenger VirtualHost中,我也进行了以下添加

  <Directory    /var/Developer/MySite/public>
   Options     -MultiViews
   AllowOverride All
   Allow       from all
   Header set Access-Control-Allow-Origin "*"
   Header set Access-Control-Allow-Methods: "GET, POST, PUT, DELETE, OPTIONS"
   Header set Access-Control-Allow-Headers: "accept, authorization, origin"
  </Directory>

这是一个痛苦的脖子。如果有人有指导,我们将非常感谢为什么CORS不起作用。

1 个答案:

答案 0 :(得分:2)

我找到了问题的答案。最初,我通过我的sites-available / defaults文件,将Sinatra Web服务路由添加到Passenger Web服务器。在两个地方设置了CORS响应头后,我的响应头都有关于允许的源,方法等的重复头信息。

一旦我从Web服务器上删除了标题,并将它们保留在Web服务路由上,我的请求就会完成。