Ruby on rails 在Rails 5上检索请求头的正确方法是什么?

Ruby on rails 在Rails 5上检索请求头的正确方法是什么?,ruby-on-rails,http-headers,Ruby On Rails,Http Headers,通过搜索,我发现使用Rails检索请求头的方法不止一种。例如,如果请求有X-AppEngine-Country头,要检索它,我会使用: request.headers["HTTP_X_APPENGINE_COUNTRY"] 或 或 这让我有点困惑,我找不到正确的方法。它是哪一个?如果您查看Rails请求头的实现,您可以看到头名称首先是“净化”的,并将其传递给Rack::request::Env对象- Rails将upcase为您提供标题名,还可以将-转换为\uu并在需要时预先添加HTTP 考虑

通过搜索,我发现使用Rails检索请求头的方法不止一种。例如,如果请求有
X-AppEngine-Country
头,要检索它,我会使用:

request.headers["HTTP_X_APPENGINE_COUNTRY"]


这让我有点困惑,我找不到正确的方法。它是哪一个?

如果您查看Rails请求头的实现,您可以看到头名称首先是“净化”的,并将其传递给
Rack::request::Env
对象-

Rails将
upcase
为您提供标题名,还可以将
-
转换为
\uu
并在需要时预先添加
HTTP

考虑到这一点:

request.headers[“HTTP\u X\u APPENGINE\u COUNTRY”]
——我会避免使用这个,因为Rails会在
HTTP\u之前加上前缀

request.headers[“X\u APPENGINE\u COUNTRY”]
——我认为使用这个没有什么错

request.headers[“X-AppEngine-Country”]
–这是我选择的,因为header名称是原始格式

干杯

request.headers["X_APPENGINE_COUNTRY"]
request.headers["X-AppEngine-Country"]
    # Converts an HTTP header name to an environment variable name if it is
    # not contained within the headers hash.
    def env_name(key)
      key = key.to_s
      if HTTP_HEADER.match?(key)
        key = key.upcase.tr("-", "_")
        key = "HTTP_" + key unless CGI_VARIABLES.include?(key)
      end
      key
    end