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_headeroption.ActionDispatch::Static - Used to serve static assets. Disabled if
config.serve_static_assetsisfalse.Rack::Lock - Sets
env["rack.multithread"]flag tofalseand 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-Idheader available to the response and enables theActionDispatch::Request#uuidmethod.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.testkey 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_storeis set to a value.ActionDispatch::ParamsParser - Parses out parameters from the request into
params.ActionDispatch::Head - Converts HEAD requests to
GETrequests 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