On this page
class ActionDispatch::Request
Constants
- ENV_METHODS
- HTTP_METHODS
- HTTP_METHOD_LOOKUP
- LOCALHOST
- RFC2518
- RFC2616
-
List of HTTP request methods from the following RFCs: Hypertext Transfer Protocol – HTTP/1.1 (www.ietf.org/rfc/rfc2616.txt) HTTP Extensions for Distributed Authoring – WEBDAV (www.ietf.org/rfc/rfc2518.txt) Versioning Extensions to WebDAV (www.ietf.org/rfc/rfc3253.txt) Ordered Collections Protocol (WebDAV) (www.ietf.org/rfc/rfc3648.txt) Web Distributed Authoring and Versioning (WebDAV) Access Control Protocol (www.ietf.org/rfc/rfc3744.txt) Web Distributed Authoring and Versioning (WebDAV) SEARCH (www.ietf.org/rfc/rfc5323.txt) PATCH Method for HTTP (www.ietf.org/rfc/rfc5789.txt)
- RFC3253
- RFC3648
- RFC3744
- RFC5323
- RFC5789
Public Class Methods
# File actionpack/lib/action_dispatch/http/request.rb, line 45
def initialize(env)
super
@method = nil
@request_method = nil
@remote_ip = nil
@original_fullpath = nil
@fullpath = nil
@ip = nil
@uuid = nil
end
Public Instance Methods
Override Rack's #GET method to support indifferent access
# File actionpack/lib/action_dispatch/http/request.rb, line 273
def GET
@env["action_dispatch.request.query_parameters"] ||= Utils.deep_munge((normalize_encode_params(super) || {}))
rescue TypeError => e
raise ActionController::BadRequest.new(:query, e)
end
Override Rack's #POST method to support indifferent access
# File actionpack/lib/action_dispatch/http/request.rb, line 281
def POST
@env["action_dispatch.request.request_parameters"] ||= Utils.deep_munge((normalize_encode_params(super) || {}))
rescue TypeError => e
raise ActionController::BadRequest.new(:request, e)
end
Returns the authorization header regardless of whether it was specified directly or through one of the proxy alternatives.
# File actionpack/lib/action_dispatch/http/request.rb, line 290
def authorization
@env['HTTP_AUTHORIZATION'] ||
@env['X-HTTP_AUTHORIZATION'] ||
@env['X_HTTP_AUTHORIZATION'] ||
@env['REDIRECT_X_HTTP_AUTHORIZATION']
end
The request body is an IO input stream. If the RAW_POST_DATA environment variable is already set, wrap it in a StringIO.
# File actionpack/lib/action_dispatch/http/request.rb, line 236
def body
if raw_post = @env['RAW_POST_DATA']
raw_post.force_encoding(Encoding::BINARY)
StringIO.new(raw_post)
else
@env['rack.input']
end
end
Returns the content length of the request as an integer.
# File actionpack/lib/action_dispatch/http/request.rb, line 187
def content_length
super.to_i
end
# File actionpack/lib/action_dispatch/middleware/cookies.rb, line 9
def cookie_jar
env['action_dispatch.cookies'] ||= Cookies::CookieJar.build(self)
end
Extracted into ActionDispatch::Request::Utils.deep_munge, but kept here for backwards compatibility.
# File actionpack/lib/action_dispatch/http/request.rb, line 303
def deep_munge(hash)
ActiveSupport::Deprecation.warn(
"This method has been extracted into ActionDispatch::Request::Utils.deep_munge. Please start using that instead."
)
Utils.deep_munge(hash)
end
Is this a DELETE request? Equivalent to request.request_method_symbol == :delete
.
# File actionpack/lib/action_dispatch/http/request.rb, line 138
def delete?
HTTP_METHOD_LOOKUP[request_method] == :delete
end
Access the contents of the flash. Use flash["notice"]
to read a notice you put there or flash["notice"] = "hello"
to put a new one.
# File actionpack/lib/action_dispatch/middleware/flash.rb, line 8
def flash
@env[Flash::KEY] ||= Flash::FlashHash.from_session_value(session["flash"])
end
# File actionpack/lib/action_dispatch/http/request.rb, line 245
def form_data?
FORM_DATA_MEDIA_TYPES.include?(content_mime_type.to_s)
end
Returns the String
full path including params of the last URL requested.
# get "/articles"
request.fullpath # => "/articles"
# get "/articles?page=2"
request.fullpath # => "/articles?page=2"
# File actionpack/lib/action_dispatch/http/request.rb, line 166
def fullpath
@fullpath ||= super
end
Is this a #GET (or HEAD) request? Equivalent to request.request_method_symbol == :get
.
# File actionpack/lib/action_dispatch/http/request.rb, line 114
def get?
HTTP_METHOD_LOOKUP[request_method] == :get
end
Is this a HEAD request? Equivalent to request.request_method_symbol == :head
.
# File actionpack/lib/action_dispatch/http/request.rb, line 144
def head?
HTTP_METHOD_LOOKUP[request_method] == :head
end
Provides access to the request's HTTP headers, for example:
request.headers["Content-Type"] # => "text/plain"
# File actionpack/lib/action_dispatch/http/request.rb, line 151
def headers
Http::Headers.new(@env)
end
# File actionpack/lib/action_dispatch/http/request.rb, line 199
def ip
@ip ||= super
end
# File actionpack/lib/action_dispatch/http/request.rb, line 56
def key?(key)
@env.key?(key)
end
True if the request came from localhost, 127.0.0.1.
# File actionpack/lib/action_dispatch/http/request.rb, line 298
def local?
LOCALHOST =~ remote_addr && LOCALHOST =~ remote_ip
end
The String
MIME type of the request.
# get "/articles"
request.media_type # => "application/x-www-form-urlencoded"
# File actionpack/lib/action_dispatch/http/request.rb, line 182
def media_type
content_mime_type.to_s
end
Returns the original value of the environment's REQUEST_METHOD, even if it was overridden by middleware. See request_method for more information.
# File actionpack/lib/action_dispatch/http/request.rb, line 103
def method
@method ||= check_method(env["rack.methodoverride.original_method"] || env['REQUEST_METHOD'])
end
Returns a symbol form of the method
# File actionpack/lib/action_dispatch/http/request.rb, line 108
def method_symbol
HTTP_METHOD_LOOKUP[method]
end
# File actionpack/lib/action_dispatch/http/request.rb, line 155
def original_fullpath
@original_fullpath ||= (env["ORIGINAL_FULLPATH"] || fullpath)
end
Returns the original request URL as a String
.
# get "/articles?page=2"
request.original_url # => "http://www.example.com/articles?page=2"
# File actionpack/lib/action_dispatch/http/request.rb, line 174
def original_url
base_url + original_fullpath
end
Is this a PATCH request? Equivalent to request.request_method == :patch
.
# File actionpack/lib/action_dispatch/http/request.rb, line 126
def patch?
HTTP_METHOD_LOOKUP[request_method] == :patch
end
Is this a #POST request? Equivalent to request.request_method_symbol == :post
.
# File actionpack/lib/action_dispatch/http/request.rb, line 120
def post?
HTTP_METHOD_LOOKUP[request_method] == :post
end
Is this a PUT request? Equivalent to request.request_method_symbol == :put
.
# File actionpack/lib/action_dispatch/http/request.rb, line 132
def put?
HTTP_METHOD_LOOKUP[request_method] == :put
end
Read the request body. This is useful for web services that need to work with raw requests directly.
# File actionpack/lib/action_dispatch/http/request.rb, line 225
def raw_post
unless @env.include? 'RAW_POST_DATA'
raw_post_body = body
@env['RAW_POST_DATA'] = raw_post_body.read(content_length)
raw_post_body.rewind if raw_post_body.respond_to?(:rewind)
end
@env['RAW_POST_DATA']
end
Originating IP address, usually set by the RemoteIp middleware.
# File actionpack/lib/action_dispatch/http/request.rb, line 204
def remote_ip
@remote_ip ||= (@env["action_dispatch.remote_ip"] || ip).to_s
end
Returns the HTTP method that the application should see. In the case where the method was overridden by a middleware (for instance, if a HEAD request was converted to a #GET, or if a _method parameter was used to determine the method the application should use), this method returns the overridden value, not the original.
# File actionpack/lib/action_dispatch/http/request.rb, line 91
def request_method
@request_method ||= check_method(env["REQUEST_METHOD"])
end
Returns a symbol form of the request_method
# File actionpack/lib/action_dispatch/http/request.rb, line 96
def request_method_symbol
HTTP_METHOD_LOOKUP[request_method]
end
TODO This should be broken apart into AD::Request::Session and probably be included by the session middleware.
# File actionpack/lib/action_dispatch/http/request.rb, line 255
def reset_session
if session && session.respond_to?(:destroy)
session.destroy
else
self.session = {}
end
@env['action_dispatch.request.flash_hash'] = nil
end
Returns the lowercase name of the HTTP server software.
# File actionpack/lib/action_dispatch/http/request.rb, line 219
def server_software
(@env['SERVER_SOFTWARE'] && /^([a-zA-Z]+)/ =~ @env['SERVER_SOFTWARE']) ? $1.downcase : nil
end
# File actionpack/lib/action_dispatch/http/request.rb, line 268
def session_options=(options)
Session::Options.set @env, options
end
Returns the unique request id, which is based off either the X-Request-Id header that can be generated by a firewall, load balancer, or web server or by the RequestId middleware (which sets the action_dispatch.request_id environment variable).
This unique ID is useful for tracing a request from end-to-end as part of logging or debugging. This relies on the rack variable set by the ActionDispatch::RequestId middleware.
# File actionpack/lib/action_dispatch/http/request.rb, line 214
def uuid
@uuid ||= env["action_dispatch.request_id"]
end
Returns true if the “X-Requested-With” header contains “XMLHttpRequest” (case-insensitive). All major JavaScript libraries send this header with every Ajax request.
# File actionpack/lib/action_dispatch/http/request.rb, line 194
def xml_http_request?
@env['HTTP_X_REQUESTED_WITH'] =~ /XMLHttpRequest/i
end
Protected Instance Methods
# File actionpack/lib/action_dispatch/http/request.rb, line 312
def parse_query(qs)
Utils.deep_munge(super)
end
© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.