简体   繁体   English

如何仅在rails 2应用程序中访问请求标头?

[英]How to access request headers only in a rails 2 application?

Rails provides a request.headers method that returns both all headers and a lot of extra non-header information... i would like to access only the request headers, how can I do so? Rails提供了一个request.headers方法,它返回所有标题和大量额外的非标题信息...我只想访问请求标题,我该怎么办?

Regards 问候

You essentially have to isolate all environment entries which are prefixed with HTTP_ or CONTENT_ , which correspond to your HTTP headers, eg: 您基本上必须隔离所有以HTTP_CONTENT_为前缀的环境条目 ,这些条目对应于您的HTTP标头,例如:

# CONTENT_LENGTH -> Content-Length
# HTTP_COOKIE -> Cookie
# HTTP_USER_AGENT -> User-Agent
@headers |= request.env.inject({}) { |h, (k, v)|
  if k =~ /^(HTTP|CONTENT)_/ then
    h[k.sub(/^HTTP_/, '').dasherize.gsub(/([^\-]+)/) { $1.capitalize }] = v 
  end
  h
}

Alternatively, you can be more restrictive and only look for specific HTTP headers in order to avoid accidentally picking up environment variables that may look like headers but are not actually valid such as CONTENT_BLA or HTTP_DUMMY . 或者,您可以更具限制性,只查找特定的 HTTP标头 ,以避免意外地拾取可能看起来像标题但实际上不是有效的环境变量,例如CONTENT_BLAHTTP_DUMMY

@headers |= %w[ CONTENT_LENGTH CONTENT_TYPE HTTP_ACCEPT
HTTP_REFERER HTTP_USER_AGENT ].inject({}) { |h, k|
  if v = request.env[k] then
    h[k.sub(/^HTTP_/, '').dasherize.gsub(/([^\-]+)/) { $1.capitalize }] = v 
  end
  h
}

Take a look at actionpack/lib/action_controller/request.rb to see how they comb the environment to extract request headers. 看看actionpack/lib/action_controller/request.rb ,了解它们如何梳理环境以提取请求标头。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM