在Ruby on Rails中访问自定义标头变量

nic*_*hvi 29 ruby-on-rails http ruby-on-rails-4

在阅读了下面的问题(Ruby on Rails中的授权标题,使用密钥HTTP_AUTHORIZATION而不是授权进行访问?)我遇到了与OP类似的问题,但建议的答案似乎并没有解决我的问题.

我在本地托管服务器(通过Postman)的调用中定义了一个自定义标头:

@Igor:我实际上使用Postman,所以我只是添加了curl代码来演示我做了什么.我想最好包含一个截图:

在此输入图像描述

这是我的控制器中的代码,它试图读取所述标题:

def authenticate_through_header
  custom_header_value = request.headers['custom_header']
end
Run Code Online (Sandbox Code Playgroud)

但是,这回归nil.另一方面,request.headers['HTTP_CUSTOM_HEADER']返回值.根据我最初链接的问题,我应该能够通过在括号[]中传递名称来获取值 - 这是在较新的Rails版本中已经更改的内容吗?

干杯:-)

更新:它还可以通过以下方式访问变量:request.headers['custom-header'].所以显然它可以用连字符替换下划线,这似乎很奇怪.

Har*_*pta 43

是的,它已经改变了Rails 4.看一下Http :: Headers代码.

现在自定义变量总是以HTTP_和为前缀_ 在您的变量中替换为 -,CGI变量除外.

HTH

编辑:再次检查,-变量被替换为_和被添加HTTP_.在上面的链接中,检查line number 91-94:

key = key.upcase.tr('-', '_')
Run Code Online (Sandbox Code Playgroud)

  • 另请注意,默认情况下,nginx会阻止带有下划线的标头. (8认同)
  • 这太奇怪了:(有没有理由为什么Rails必须这样做? (5认同)