【发布时间】:2010-02-22 15:24:50
【问题描述】:
我希望有人可以为我解决问题。我使用的是 Rails 2.3.5,我可以像这样在控制器操作中访问请求标头:
def index
if request.headers['...'] == '...'
...
end
end
或类似的东西。 request.headers 是ActionController::Http::Headers 的一个实例,它似乎是一个哈希。因此,我希望标题以我发送的名称为关键字。但是,如果我发送带有Authorization 标头的请求,如下所示:
curl -H 'Authorization: OAuth realm="MyRealm",...' http://app/path
动作中的以下代码返回false:
if request.headers.include?('Authorization') ...
而以下内容与我在标头中发送的值相呼应:
render :text => request.headers['Authorization']
有趣的是,以下检查返回 true:
if request.headers.include?('HTTP_AUTHORIZATION') ...
类似地,下面的内容回显了我在标头中发送的值:
render :text => request.headers['HTTP_AUTHORIZATION']
似乎发生了一些我不知道的魔法。我完全不明白为什么检查“授权”键失败,但渲染 request.headers['Authorization'] 的值会成功。我也对“HTTP_AUTHORIZATION”的来源感到困惑,因为这 不是 我与请求一起发送的标头的名称。有谁知道具体是怎么回事?
【问题讨论】:
-
我花了一个小时才弄清楚这一点。我认为这很令人困惑:至少他们应该更好地记录这种行为。
标签: ruby-on-rails http