Class: ActionDispatch::Http::Headers
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Instance Chain:
|
|
Inherits: | Object |
Defined in: | actionpack/lib/action_dispatch/http/headers.rb |
Overview
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"
Constant Summary
-
CGI_VARIABLES =
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 29Set.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
-
DEFAULT =
Internal use only
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 82Object.new
-
HTTP_HEADER =
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 50/\A[A-Za-z0-9-]+\z/
Class Method Summary
- .from_hash(hash)
- .new(request) ⇒ Headers constructor Internal use only
Instance Attribute Summary
::Enumerable
- Included
#many? | Returns |
Instance Method Summary
-
#[](key)
Returns the value for the given key mapped to @env.
-
#[]=(key, value)
Sets the given value for the key mapped to @env.
-
#add(key, value)
Add a value to a multivalued header like
Vary
orAccept-Encoding
. - #each(&block)
- #env
-
#fetch(key, default = DEFAULT)
Returns the value for the given key mapped to @env.
-
#include?(key)
Alias for #key?.
- #key?(key) ⇒ Boolean (also: #include?)
-
#merge(headers_or_env)
Returns a new
Headers
instance containing the contents ofheaders_or_env
and the original instance. -
#merge!(headers_or_env)
Adds the contents of
headers_or_env
to original instance entries; duplicate keys are overwritten with the values fromheaders_or_env
. -
#env_name(key)
private
Converts an HTTP header name to an environment variable name if it is not contained within the headers hash.
::Enumerable
- Included
#compact_blank | Returns a new |
#exclude? | The negative of the |
#excluding | Returns a copy of the enumerable excluding the specified elements. |
#in_order_of | Returns a new |
#including | Returns a new array that includes the passed elements. |
#index_by | Convert an enumerable to a hash, using the block result as the key and the element as the value. |
#index_with | Convert an enumerable to a hash, using the element as the key and the block result as the value. |
#maximum | Calculates the maximum from the extracted elements. |
#minimum | Calculates the minimum from the extracted elements. |
#pick | Extract the given key from the first element in the enumerable. |
#pluck | Extract the given key from each element in the enumerable. |
#sole | Returns the sole item in the enumerable. |
#without | Alias for Enumerable#excluding. |
#as_json |
::ActiveSupport::EnumerableCoreExt::Constants
- Included
Constructor Details
.new(request) ⇒ Headers
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 58
def initialize(request) # :nodoc: @req = request end
Class Method Details
.from_hash(hash)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/headers.rb', line 54
def self.from_hash(hash) new ActionDispatch::Request.new hash end
Instance Method Details
#[](key)
Returns the value for the given key mapped to @env.
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 63
def [](key) @req.get_header env_name(key) end
#[]=(key, value)
Sets the given value for the key mapped to @env.
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 68
def []=(key, value) @req.set_header env_name(key), value end
#add(key, value)
Add a value to a multivalued header like Vary
or Accept-Encoding
.
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 73
def add(key, value) @req.add_header env_name(key), value end
#each(&block)
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/headers.rb', line 98
def each(&block) @req.each_header(&block) end
#env
[ GitHub ]# File 'actionpack/lib/action_dispatch/http/headers.rb', line 118
def env; @req.env.dup; end
#env_name(key) (private)
Converts an HTTP header name to an environment variable name if it is not contained within the headers hash.
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 123
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
#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.
#include?(key)
Alias for #key?.
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 80
alias :include? :key?
#key?(key) ⇒ Boolean
Also known as: #include?
# File 'actionpack/lib/action_dispatch/http/headers.rb', line 77
def key?(key) @req.has_header? env_name(key) end
#merge(headers_or_env)
Returns a new Headers
instance containing the contents of headers_or_env
and the original instance.
# 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
#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
.