Class Rack::ConditionalGet
In: lib/rack/conditionalget.rb
Parent: Object

Middleware that enables conditional GET using If-None-Match and If-Modified-Since. The application should set either or both of the Last-Modified or Etag response headers according to RFC 2616. When either of the conditions is met, the response body is set to be zero length and the response status is set to 304 Not Modified.

Applications that defer response body generation until the body‘s each message is received will avoid response body generation completely when a conditional GET matches.

Adapted from Michael Klishin‘s Merb implementation: github.com/wycats/merb-core/tree/master/lib/merb-core/rack/middleware/conditional_get.rb

Methods

call   new  

Public Class methods

[Source]

    # File lib/rack/conditionalget.rb, line 16
16:     def initialize(app)
17:       @app = app
18:     end

Public Instance methods

[Source]

    # File lib/rack/conditionalget.rb, line 20
20:     def call(env)
21:       return @app.call(env) unless %w[GET HEAD].include?(env['REQUEST_METHOD'])
22: 
23:       status, headers, body = @app.call(env)
24:       headers = Utils::HeaderHash.new(headers)
25:       if etag_matches?(env, headers) || modified_since?(env, headers)
26:         status = 304
27:         body = []
28:       end
29:       [status, headers, body]
30:     end

[Validate]