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"
Methods
Included Modules
Constants
CGI_VARIABLES | = | Set.new(%W[ AUTH_TYPE CONTENT_LENGTH CONTENT_TYPE GATEWAY_INTERFACE HTTPS PATH_INFO PATH_TRANSLATED QUERY_STRING REMOTE_ADDR REMOTE_HOST REMOTE_IDENT REMOTE_USER REQUEST_METHOD SCRIPT_NAME SERVER_NAME SERVER_PORT SERVER_PROTOCOL SERVER_SOFTWARE ]).freeze |
HTTP_HEADER | = | /\A[A-Za-z0-9-]+\z/ |
Class Public methods
from_hash(hash)
📝 Source code
# File actionpack/lib/action_dispatch/http/headers.rb, line 50
def self.from_hash(hash)
new ActionDispatch::Request.new hash
end
🔎 See on GitHub
Instance Public methods
[](key)
Returns the value for the given key mapped to @env.
📝 Source code
# File actionpack/lib/action_dispatch/http/headers.rb, line 59
def [](key)
@req.get_header env_name(key)
end
🔎 See on GitHub
[]=(key, value)
Sets the given value for the key mapped to @env.
📝 Source code
# File actionpack/lib/action_dispatch/http/headers.rb, line 64
def []=(key, value)
@req.set_header env_name(key), value
end
🔎 See on GitHub
add(key, value)
Add a value to a multivalued header like Vary or Accept-Encoding.
📝 Source code
# File actionpack/lib/action_dispatch/http/headers.rb, line 69
def add(key, value)
@req.add_header env_name(key), value
end
🔎 See on GitHub
each(&block)
📝 Source code
# File actionpack/lib/action_dispatch/http/headers.rb, line 95
def each(&block)
@req.each_header(&block)
end
🔎 See on GitHub
env()
📝 Source code
# File actionpack/lib/action_dispatch/http/headers.rb, line 116
def env; @req.env.dup; end
🔎 See on GitHub
fetch(key, default = DEFAULT)
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.
📝 Source code
# File actionpack/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
🔎 See on GitHub
key?(key)
📝 Source code
# File actionpack/lib/action_dispatch/http/headers.rb, line 73
def key?(key)
@req.has_header? env_name(key)
end
🔎 See on GitHub
merge(headers_or_env)
Returns a new Http::Headers
instance containing the contents of headers_or_env
and the original instance.
📝 Source code
# File actionpack/lib/action_dispatch/http/headers.rb, line 101
def merge(headers_or_env)
headers = @req.dup.headers
headers.merge!(headers_or_env)
headers
end
🔎 See on GitHub
merge!(headers_or_env)
Adds the contents of headers_or_env
to original instance entries; duplicate keys are overwritten with the values from headers_or_env
.
📝 Source code
# File actionpack/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
🔎 See on GitHub