Sunday 22 December 2013

Rails Middleware Stack

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 is false.
    Rack::Lock
  • Sets env["rack.multithread"] flag to false 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 the ActionDispatch::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 to true.
    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_torespond_with).
  • ActionController::Cookies: Support for cookies, which includes support for signed and encrypted cookies. This requires the cookie middleware.

No comments:

Post a Comment