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"

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 54
      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 63
      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 68
      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 73
      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 98
      def each(&block)
        @req.each_header(&block)
      end
πŸ”Ž See on GitHub

env()

πŸ“ Source code
# File actionpack/lib/action_dispatch/http/headers.rb, line 118
      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 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
πŸ”Ž See on GitHub

include?(key)

Alias for: key?

key?(key)

Also aliased as: include?
πŸ“ Source code
# File actionpack/lib/action_dispatch/http/headers.rb, line 77
      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 104
      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 112
      def merge!(headers_or_env)
        headers_or_env.each do |key, value|
          @req.set_header env_name(key), value
        end
      end
πŸ”Ž See on GitHub