12

我试图让一些 AJAX 在两个子域之间工作。

rails.mydomain.com 和 mydomain.com

在 apache 中,在 /etc/apache2/sites-available/ 我有我的 rails.mydomain.com 文件:

<VirtualHost *:80>
    Header add Access-Control-Allow-Origin "http://www.mydomain.com"
    Header add Access-Control-Allow-Origin "http://www.dev-mydomain.com"
</VirtualHost>

但是,每当我尝试从http://www.dev-mydomain.com执行简单的 ajax 测试请求时,在 Chrome 中我会得到:“XMLHttpRequest cannot load http://rails.mydomain.com/directory。Origin http:// Access-Control-Allow-Origin 不允许/www.dev-mydomain.com 。”

有人知道我错过了什么吗?

4

5 回答 5

3

正如 Dahazer 的链接所指出的,最好的办法是设置一个 Access-Control-Allow-Origin 标头。它绝对不适合生产,但您可以Origin在开发模式下回显标题。

如果您仍然有问题,则可能是您在响应中没有设置足够多的 CORS 标头。根据我在 chrome 中做跨域 ajax 的经验(不使用 jquery mind),我还需要设置以下标题:

Access-Control-Allow-Headers : X-Requested-With,Content-Type

鉴于我使用的是 POST 和 GET 以外的 HTTP 方法,因此我也有必要设置

Access-Control-Allow-Methods : GET,PUT,POST,DELETE

但是,最重要的是,我建议阅读 html5 CORS 教程,尤其是服务器部分的 CORS。根据您的特定用例,它应该让您对配置 CORS 的不同方法有一个很好的了解,无论是在服务器上还是客户端上(在您的情况下为 jquery 的 ajax 配置选项)。

于 2012-12-25T11:03:31.063 回答
2

你能试试这个吗?

到 Gemfile

gem "rack-cors", "~> 0.2.7"

config/application.rb

config.middleware.use Rack::Cors do |requests|
  requests.allow do |allow|
    allow.origins '*'
    allow.resource '*', headers: :any, methods: [:get, :post, :put, :delete, :options]
  end
end

不要忘记重启服务器。那么它应该是工作。

于 2012-12-24T23:16:44.760 回答
2

我最近有这个问题。我已经在 Apache中设置Access-Control-Allow-Origin了。*然而,Chrome 仍然阻止我的跨域请求,而它在 Firefox 中运行良好。

对我有用的解决方案是添加一个Access-Control-Allow-Methods带有 value 的标题OPTIONS, GET, POST。在这里发布这个,以防将来有人遇到同样的问题并且其他解决方案都不起作用。

于 2012-12-26T13:00:35.997 回答
0

问题可能出在 4 个不同的地方。让我们从你的<virthualhost定义开始。首先,您需要一些模块和配置设置,才能让您的虚拟主机定义实现这些设置。

  • 确保mod_headers已启用
  • 确保您的主要 apache 配置文件具有AllowOverride允许您的虚拟主机覆盖默认 CORS 设置的设置

完成这两项后,您可以使用该Access-Control-Allow-Origin设置,前提是您还使用DocumentRoot指令

<VirtualHost *:80>
    DocumentRoot /server/path/to/site/root
    Header add Access-Control-Allow-Origin "mydomain.com"
    Header add Access-Control-Allow-Origin "dev-mydomain.com"
    Header set Access-Control-Allow-Methods "GET,POST,PUT,OPTIONS"
</VirtualHost>
于 2014-02-22T19:14:48.623 回答
0

我已经使用rack-cors取得了一些成功,在做跨源 ajax 时添加非常简单......

于 2012-09-10T12:02:59.913 回答