2

我的Rails 3 应用程序使用 mongodb simple rest api 时遇到跨域资源共享(CORS) 问题。我有一些 CoffeeScript/JavaScript 正在尝试使用mongodb simple rest api,但是 Chrome 会通过以下控制台消息阻止它:

XMLHttpRequest 无法加载 http://127.0.0.1:28017/my-db/my-collection/。Access-Control-Allow-Origin 不允许来源 http://127.0.0.1:3000。

我从这篇文中添加了两个控制器方法:

before_filter :cors_preflight_check
after_filter :cors_set_access_control_headers

def cors_set_access_control_headers
  headers['Access-Control-Allow-Origin']  = '*'
  headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
  headers['Access-Control-Max-Age']       = '1728000'
end

def cors_preflight_check
  if request.method == :options
    headers['Access-Control-Allow-Origin']  = '*'
    headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
    headers['Access-Control-Allow-Headers'] = 'Content-Type, X-Requested-With, X-Prototype-Version'
    headers['Access-Control-Max-Age']       = '1728000'
    render text: '', content_type: 'text/plain'
  end
end

我可以看到我的 Rails 页面的标题。但是,它仍然无法正常工作。

我最好的猜测是,mongodb simple rest api 使用的任何 Web 服务器都需要包含标头,而不是我的 Rails 应用程序。 任何人都可以确认或否认这一点吗?

我还在某处读到我可以在 nginx 中使用代理重写规则。但是,这有点乏味,特别是因为我没有运行 nginx 进行开发,只在生产服务器上运行。

4

1 回答 1

0

无论您在 Rails 中设置什么标头,都与 Chrome 直接发送给 MongoDB 的 ajax 请求的标头无关。您需要使用 JSONP 来解决 CORS 问题。

--rest使用and启动 mongod,--jsonpMongod 将被正确设置。然后使用 jquery 或其他任何方式发出 JSONP 请求,它应该可以正常工作。

于 2013-11-13T00:07:54.943 回答