Skip to Content Skip to Search

class ActionDispatch::Http::Headers

Action Dispatch 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"

Inherits From

Constants

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
/\A[A-Za-z0-9-]+\z/

Public class methods

Source code GitHub
# File actionpack/lib/action_dispatch/http/headers.rb, line 54
def self.from_hash(hash)
  new ActionDispatch::Request.new hash
end

Public instance methods

Returns the value for the given key mapped to @env.

Source code GitHub
# File actionpack/lib/action_dispatch/http/headers.rb, line 63
def [](key)
  @req.get_header env_name(key)
end

Sets the given value for the key mapped to @env.

Source code GitHub
# File actionpack/lib/action_dispatch/http/headers.rb, line 68
def []=(key, value)
  @req.set_header env_name(key), value
end

Add a value to a multivalued header like Vary or Accept-Encoding.

Source code GitHub
# File actionpack/lib/action_dispatch/http/headers.rb, line 73
def add(key, value)
  @req.add_header env_name(key), value
end
Source code GitHub
# File actionpack/lib/action_dispatch/http/headers.rb, line 98
def each(&block)
  @req.each_header(&block)
end
Source code GitHub
# File actionpack/lib/action_dispatch/http/headers.rb, line 118
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.

Source code GitHub
# File actionpack/lib/action_dispatch/http/headers.rb, line 90
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

Alias for: key?.

Also aliased as: include?.

Source code GitHub
# File actionpack/lib/action_dispatch/http/headers.rb, line 77
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.

Source code GitHub
# File actionpack/lib/action_dispatch/http/headers.rb, line 104
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.

Source code GitHub
# File actionpack/lib/action_dispatch/http/headers.rb, line 112
def merge!(headers_or_env)
  headers_or_env.each do |key, value|
    @req.set_header env_name(key), value
  end
end

Definition files