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"
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/ |
DEFAULT | = | Object.new # :nodoc: |
Returns the value for the given key mapped to @env.
Sets the given value for the key mapped to @env.
Add a value to a multivalued header like Vary or Accept-Encoding.
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.
Returns a new Http::Headers instance containing
the contents of headers_or_env
and the original instance.
Adds the contents of headers_or_env
to original instance
entries; duplicate keys are overwritten with the values from
headers_or_env
.