我正在尝试让 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 。Access-Control-Allow-Origin 不允许 Origin http://www.dev-mydomain.com。”
有人知道我错过了什么吗?
最佳答案
正如 Dahazer 的链接所指出的,最好的选择是设置单个 Access-Control-Allow-Origin header 。它绝对不适合生产,但您可以在开发模式下回显 Origin
header 。
如果您仍然遇到问题,则可能是您没有在响应中设置足够多的 CORS header 。根据我在 chrome 中执行跨域 ajax 的经验(不使用 jquery mind),我还需要设置以下 header :
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 配置选项)。
关于jquery - Apache 中启用了 CORS,但 AJAX 无法正常工作(chrome 表示不允许来源),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12143906/