我有 Rails 应用程序,它们使用 ActiveResource 相互通信。我已经设置了 VHOST 以将每个 HTTP 请求重定向到 HTTPS。这是一个应用程序的 VHOST:
<VirtualHost *.80>
<Location />
Redirect permanent / https://my.app.com/
</Location>
</VirtualHost>
#http requests will forwarded here by the above Redirect
<VirtualHost *.443>
....
</VirtualHost>
这会在我通过浏览器访问时重定向查找,但是当我通过 ActiveResource 发送 HTTP 请求时,它会返回错误:Moved Permanently。我知道在上述设置中可能会发生这种情况,但是如何应对这种情况并使 ActiveResource 工作,即使它向 HTTP 发送请求(应该转发到 HTTPS)?
谢谢,
伊姆兰
最佳答案
Rails 无法自动重定向 ActiveResource 调用,因为根据 HTTP spec,只有 GET
和 HEAD
请求可以自动重定向.
因此,来自服务器的重定向将引发 ActiveResource::Redirection
异常,您必须在代码中处理此异常:
begin
# Make some ActiveResource calls
rescue ActiveResource::Redirection
# Error handling
end
您可以尝试在 rescue
block 中发出新的 HTTPS 请求(可能通过更新 ActiveResource 模型的 site
属性)。但是,您需要围绕所有 ActiveResource 操作进行这种错误处理,这会使您的代码更难阅读和维护。
因此,我的建议是您不要尝试在您的代码中处理重定向,而是要求所有连接到您的应用程序的客户端始终使用 HTTPS 版本。
关于ruby-on-rails - rails : ActiveResource and Apache Redirect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4500931/