从我的搜索中,我发现使用Rails检索(或曾经使用)一种以上的请求标头的方法。例如,如果请求具有X-AppEngine-Country
标头,则可以使用以下命令来检索它:
request.headers["HTTP_X_APPENGINE_COUNTRY"]
或
request.headers["X_APPENGINE_COUNTRY"]
或
request.headers["X-AppEngine-Country"]
这对我来说有点混乱,我找不到正确的方法。是哪一个?
答案 0 :(得分:1)
如果您看一下Rails请求标头的实现,您会发现标头名称首先被“清理”了,并将其传递给Rack::Request::Env
对象– https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/headers.rb#L122
# 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
Rails会为您upcase
标头名称,并将-
转换为_
并在需要时在HTTP_
前面加上。
考虑到这一点:
request.headers["HTTP_X_APPENGINE_COUNTRY"]
–我会避免这一点,因为Rails将在HTTP_
之前。
request.headers["X_APPENGINE_COUNTRY"]
–我认为使用此功能没有错。
request.headers["X-AppEngine-Country"]
–这是我要选择的,因为标题名称是其原始格式。
干杯!