【发布时间】:2019-01-04 16:17:33
【问题描述】:
在 Chrome 进行跨域 AJAX 调用之前,它会进行如下所示的 OPTIONS 检查:
curl \
'https://fubar.com/users/sign_in' \
-X OPTIONS \
-H 'Access-Control-Request-Method: POST' \
-H 'Origin: http://snafu.com' \
-H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' \
-H 'Access-Control-Request-Headers: content-type' \
--compressed \
--insecure \
--verbose
(我添加了--insecure和--verbose进行测试。)
我可以在 Apache 日志中看到这个请求,但它没有到达 Rails。
127.0.0.1 - - [27/Jul/2018:09:22:44 -0400] "OPTIONS /users/sign_in HTTP/1.1" 200 -
如果我删除 Access-Control-Request-Method 或 Origin 标头,那么它确实将请求传递给 Rails。
这两个标头的组合似乎导致 Apache 自己处理请求,而不给 Rails 处理它的机会。
我没有在 Apache 配置中设置任何标题或定义任何重写规则;它基本上是一个普通的安装。
我找不到任何文档或配置来解释为什么会发生这种情况以及如何防止它。
【问题讨论】:
-
为什么是因为规范说以及它是如何在 OPTIONS 响应后终止连接的。
标签: ruby-on-rails ajax apache cors passenger