diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2006-11-23 23:52:25 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2006-11-23 23:52:25 +0000 |
commit | 7c7d58937b614350d2cd474c45ff188864f67505 (patch) | |
tree | bdaa34b40cb4457c2b61c795a6d0e5345e404233 | |
parent | efd0bdd9eaf66a361b01739522794ec0c9453d15 (diff) | |
download | rails-7c7d58937b614350d2cd474c45ff188864f67505.tar.gz rails-7c7d58937b614350d2cd474c45ff188864f67505.tar.bz2 rails-7c7d58937b614350d2cd474c45ff188864f67505.zip |
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
-rw-r--r-- | actionpack/CHANGELOG | 2 | ||||
-rw-r--r-- | actionpack/lib/action_controller/cgi_process.rb | 24 |
2 files changed, 18 insertions, 8 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG index 5602d315f6..3025519ab2 100644 --- a/actionpack/CHANGELOG +++ b/actionpack/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Fixed that HEAD should return the proper Content-Length header (that is, actually use @body.size, not just 0) [DHH] + * Added GET-masquarading for HEAD, so request.method will return :get even for HEADs. This will help anyone relying on case request.method to automatically work with HEAD and map.resources will also allow HEADs to all GET actions. Rails automatically throws away the response content in a reply to HEAD, so you don't even need to worry about that. If you, for whatever reason, still need to distinguish between GET and HEAD in some edge case, you can use Request#head? and even Request.headers["REQUEST_METHOD"] for get the "real" answer. Closes #6694 [DHH] * Update Routing to complain when :controller is not specified by a route. Closes #6669. [Nicholas Seckar] 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 |