3.3 Internal Middleware Stack
Much of Action Controller's functionality is implemented as Middlewares. The following list explains the purpose of each of them:
Rack::Sendfile
- Sets server specific X-Sendfile header. Configure this via
config.action_dispatch.x_sendfile_header
option.ActionDispatch::Static
- Used to serve static assets. Disabled if
config.serve_static_assets
isfalse
.Rack::Lock
- Sets
env["rack.multithread"]
flag tofalse
and wraps the application within a Mutex.ActiveSupport::Cache::Strategy::LocalCache::Middleware
- Used for memory caching. This cache is not thread safe.
Rack::Runtime
- Sets an X-Runtime header, containing the time (in seconds) taken to execute the request.
Rack::MethodOverride
- Allows the method to be overridden if
params[:_method]
is set. This is the middleware which supports the PUT and DELETE HTTP method types.ActionDispatch::RequestId
- Makes a unique
X-Request-Id
header available to the response and enables theActionDispatch::Request#uuid
method.Rails::Rack::Logger
- Notifies the logs that the request has began. After request is complete, flushes all the logs.
ActionDispatch::ShowExceptions
- Rescues any exception returned by the application and calls an exceptions app that will wrap it in a format for the end user.
ActionDispatch::DebugExceptions
- Responsible for logging exceptions and showing a debugging page in case the request is local.
ActionDispatch::RemoteIp
- Checks for IP spoofing attacks.
ActionDispatch::Reloader
- Provides prepare and cleanup callbacks, intended to assist with code reloading during development.
ActionDispatch::Callbacks
- Runs the prepare callbacks before serving the request.
ActiveRecord::ConnectionAdapters::ConnectionManagement
- Cleans active connections after each request, unless the
rack.test
key in the request environment is set totrue
.ActiveRecord::QueryCache
- Enables the Active Record query cache.
ActionDispatch::Cookies
- Sets cookies for the request.
ActionDispatch::Session::CookieStore
- Responsible for storing the session in cookies.
ActionDispatch::Flash
- Sets up the flash keys. Only available if
config.action_controller.session_store
is set to a value.ActionDispatch::ParamsParser
- Parses out parameters from the request into
params
.ActionDispatch::Head
- Converts HEAD requests to
GET
requests and serves them as so.Rack::ConditionalGet
- Adds support for "Conditional
GET
" so that server responds with nothing if page wasn't changed.Rack::ETag
- Adds ETag header on all String bodies. ETags are used to validate cache.
API application (using ActionController::API) comes with the following controller modules by default:
- ActionController::UrlFor: Makes url_for and friends available
- ActionController::Redirecting: Support for redirect_to
- ActionController::Rendering: Basic support for rendering
- ActionController::Renderers::All: Support for render :json and friends
- ActionController::ConditionalGet: Support for stale?
- ActionController::ForceSSL: Support for force_ssl
- ActionController::RackDelegation: Support for the request and response methods returningActionDispatch::Request and ActionDispatch::Response objects.
- ActionController::DataStreaming: Support for send_file and send_data
- AbstractController::Callbacks: Support for before_filter and friends
- ActionController::Instrumentation: Support for the instrumentation hooks defined by ActionController (seethe source for more).
- ActionController::Rescue: Support for rescue_from.
- AbstractController::Translation: Support for the l and t localization and translation methods. These delegate to I18n.translate and I18n.localize.
- ActionController::HttpAuthentication::Basic::ControllerMethods (or Digest or Token): Support for basic, digest or token HTTP authentication.
- AbstractController::Layouts: Support for layouts when rendering.
- ActionController::MimeResponds (and ActionController::ImplicitRender for Rails 4): Support for content negotiation (respond_to, respond_with).
- ActionController::Cookies: Support for cookies, which includes support for signed and encrypted cookies. This requires the cookie middleware.
No comments:
Post a Comment