class ActionDispatch::Http::Headers
Provides access to the request’s HTTP headers from the environment.
env = { "CONTENT_TYPE" => "text/plain", "HTTP_USER_AGENT" => "curl/7.43.0" } headers = ActionDispatch::Http::Headers.from_hash(env) headers["Content-Type"] # => "text/plain" headers["User-Agent"] # => "curl/7.43.0"
Also note that when headers are mapped to CGI-like variables by the Rack
server, both dashes and underscores are converted to underscores. This ambiguity cannot be resolved at this stage anymore. Both underscores and dashes have to be interpreted as if they were originally sent as dashes.
# GET / HTTP/1.1 # ... # User-Agent: curl/7.43.0 # X_Custom_Header: token headers["X_Custom_Header"] # => nil headers["X-Custom-Header"] # => "token"
Constants
- CGI_VARIABLES
- HTTP_HEADER
Public Class Methods
# File lib/action_dispatch/http/headers.rb, line 50 def self.from_hash(hash) new ActionDispatch::Request.new hash end
Public Instance Methods
Returns the value for the given key mapped to @env.
# File lib/action_dispatch/http/headers.rb, line 59 def [](key) @req.get_header env_name(key) end
Sets the given value for the key mapped to @env.
# File lib/action_dispatch/http/headers.rb, line 64 def []=(key, value) @req.set_header env_name(key), value end
Add a value to a multivalued header like Vary
or Accept-Encoding
.
# File lib/action_dispatch/http/headers.rb, line 69 def add(key, value) @req.add_header env_name(key), value end
# File lib/action_dispatch/http/headers.rb, line 95 def each(&block) @req.each_header(&block) end
# File lib/action_dispatch/http/headers.rb, line 116 def env; @req.env.dup; end
Returns the value for the given key mapped to @env.
If the key is not found and an optional code block is not provided, raises a KeyError
exception.
If the code block is provided, then it will be run and its result returned.
# File lib/action_dispatch/http/headers.rb, line 87 def fetch(key, default = DEFAULT) @req.fetch_header(env_name(key)) do return default unless default == DEFAULT return yield if block_given? raise KeyError, key end end
# File lib/action_dispatch/http/headers.rb, line 73 def key?(key) @req.has_header? env_name(key) end
Returns a new Http::Headers
instance containing the contents of headers_or_env
and the original instance.
# File lib/action_dispatch/http/headers.rb, line 101 def merge(headers_or_env) headers = @req.dup.headers headers.merge!(headers_or_env) headers end
Adds the contents of headers_or_env
to original instance entries; duplicate keys are overwritten with the values from headers_or_env
.
# File lib/action_dispatch/http/headers.rb, line 110 def merge!(headers_or_env) headers_or_env.each do |key, value| @req.set_header env_name(key), value end end
Private Instance Methods
Converts an HTTP header name to an environment variable name if it is not contained within the headers hash.
# File lib/action_dispatch/http/headers.rb, line 121 def env_name(key) key = key.to_s if HTTP_HEADER.match?(key) key = key.upcase key.tr!("-", "_") key.prepend("HTTP_") unless CGI_VARIABLES.include?(key) end key end