From 7c7d58937b614350d2cd474c45ff188864f67505 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Thu, 23 Nov 2006 23:52:25 +0000 Subject: Fixed that HEAD should return the proper Content-Length header (that is, actually use @body.size, not just 0) [DHH] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5622 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_controller/cgi_process.rb | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'actionpack/lib') diff --git a/actionpack/lib/action_controller/cgi_process.rb b/actionpack/lib/action_controller/cgi_process.rb index 10a3f08b91..47de1956cc 100644 --- a/actionpack/lib/action_controller/cgi_process.rb +++ b/actionpack/lib/action_controller/cgi_process.rb @@ -171,7 +171,9 @@ end_msg end def out(output = $stdout) - convert_content_type!(@headers) + convert_content_type! + set_content_length! + output.binmode if output.respond_to?(:binmode) output.sync = false if output.respond_to?(:sync=) @@ -196,16 +198,22 @@ end_msg end private - def convert_content_type!(headers) - if header = headers.delete("Content-Type") - headers["type"] = header + def convert_content_type! + if content_type = @headers.delete("Content-Type") + @headers["type"] = content_type end - if header = headers.delete("Content-type") - headers["type"] = header + if content_type = @headers.delete("Content-type") + @headers["type"] = content_type end - if header = headers.delete("content-type") - headers["type"] = header + if content_type = @headers.delete("content-type") + @headers["type"] = content_type end end + + # Don't set the Content-Length for block-based bodies as that would mean reading it all into memory. Not nice + # for, say, a 2GB streaming file. + def set_content_length! + @headers["Content-Length"] = @body.size unless @body.respond_to?(:call) + end end end -- cgit v1.2.3