gpt4 book ai didi

ruby-on-rails - Apache 如何以及为何拦截对 Rails 的一些 CORS 请求?

转载 作者:行者123 更新时间:2023-12-04 03:36:36 24 4
gpt4 key购买 nike

在 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-MethodOrigin header ,那么它将请求传递给 Rails。 p>

这两个 header 的组合似乎导致 Apache 自行处理请求,而不给 Rails 处理请求的机会。

我没有在 Apache 配置中设置任何 header 或定义任何重写规则;它基本上是普通安装。

我找不到任何文档或配置来解释为什么会发生这种情况以及如何防止这种情况。

最佳答案

1) OPTIONS HTTP 调用 'https://fubar.com/users/sign_in' 从 chrome 浏览器执行,请求 header 'Access-Control -Request-Method: POST' and 'Origin: http://snafu.com'

2) 'https://fubar.com/users/sign_in' 的服务器收到请求

第一步

路由是来自 nginx 或 apache 网络服务器的句柄,它们将首先应用自己的配置规则。此设置包含在 /etc/apache2/etc/nginx

中的文件中

例如,对于 nginx,您可以定义规则以 add_headerhttp 响应或设置以重定向到另一个 url

例如

add_header "Access-Control-Allow-Origin: '*'"

这将为所有响应添加 header "Access-Control-Allow-Origin: '*'"。例如,如果您将此响应应用于所有 OPTIONS 请求,则所有后续 http 请求都将从任何 http origin

列入白名单

第 2 步

应用 nginx/apache 重定向规则后,rails router 接收请求并重定向到您的 Controller 。

在这里你仍然可以在 Controller 中添加你想要的任何 header ,你可以将 OPTIONS 请求重定向到特定的 Controller 操作,它可以添加特定的 header ,注意不要添加两次相同的 header 因为这可能会导致问题。

在此操作中,您可以在 OPTIONS 请求的响应中重写 Access-Control-Allow-Origin header ,以仅将特定来源域列入白名单(您只需要编写仅应用于 OPTIONS 请求的路由规则)

源域写在请求头中

request headers 'Access-Control-Request-Method: POST' and 'Origin: http://snafu.com'

关于ruby-on-rails - Apache 如何以及为何拦截对 Rails 的一些 CORS 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51559656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com