Make sure we always read the body of a PUT or POST request

Unfortunately if a PUT or POST request that has a body fails to
read it then Apache will sometimes fail to return the response it
is given to the client properly, instead erroring:

  https://issues.apache.org/bugzilla/show_bug.cgi?id=44782

To work round this we call rewind on the body for every request using
a filter, which forces it to be fetched from Apache into a file.
This commit is contained in:
Tom Hughes 2012-11-01 12:45:37 +00:00
parent 3ef02b86f0
commit c2c2535b73

View file

@ -3,6 +3,8 @@ class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :fetch_body
if STATUS == :database_readonly or STATUS == :database_offline
def self.cache_sweeper(*sweepers)
end
@ -404,7 +406,20 @@ class ApplicationController < ActionController::Base
format.all { render :nothing => true, :status => :not_found }
end
end
##
# Unfortunately if a PUT or POST request that has a body fails to
# read it then Apache will sometimes fail to return the response it
# is given to the client properly, instead erroring:
#
# https://issues.apache.org/bugzilla/show_bug.cgi?id=44782
#
# To work round this we call rewind on the body here, which is added
# as a filter, to force it to be fetched from Apache into a file.
def fetch_body
request.body.rewind
end
private
# extract authorisation credentials from headers, returns user = nil if none