我正在尝试在两个子域之间运行一些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无法加载http://rails.mydomain.com/directory。来源http://www.dev-mydomain.com不允许访问控制允许来源“。
任何人都知道我错过了什么?
答案 0 :(得分: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 on the server部分。 根据您的具体用例,它应该让您很好地了解配置CORS的不同方法,无论是在服务器上还是在客户端上(在您的情况下是jquery的ajax配置选项)。
答案 1 :(得分: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
不要忘记重启服务器。那应该是工作。
答案 2 :(得分:2)
我最近遇到过这个问题。我在Apache中将Access-Control-Allow-Origin
设置为*
。但是,Chrome仍然阻止了我的跨域请求,而它在Firefox中运行良好。
对我有用的解决方案是添加值为Access-Control-Allow-Methods
的{{1}}标头。在此处发布此信息,以防将来任何人遇到相同问题且其他解决方案均无效。
答案 3 :(得分:0)
我已经使用rack-cors取得了一些成功,在进行跨越原始的ajax时添加非常简单......
答案 4 :(得分:0)
这个问题可能出在4个不同的地方。让我们从您的<virthualhost
定义开始。首先,您需要拥有一些模块和配置设置,甚至允许您的vhost定义实现这些设置。
mod_headers
已启用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>