Skip to content
Browse files

Remove Content-Length header from :no_content responses

  • Loading branch information...
1 parent 72c9834 commit 431e696b899dbc48afdfb842af73e8f75bf6b08c @jeremy jeremy committed with wycats Jan 7, 2009
Showing with 12 additions and 4 deletions.
  1. +6 −3 actionpack/lib/action_controller/response.rb
  2. +6 −1 actionpack/test/controller/render_test.rb
View
9 actionpack/lib/action_controller/response.rb
@@ -231,10 +231,13 @@ def convert_content_type!
# 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!
- unless body.respond_to?(:call) || (status && status.to_s[0..2] == '304')
- self.headers["Content-Length"] ||= body.size
+ if status && status.to_s[0..2] == '204'
+ headers.delete('Content-Length')
+ elsif length = headers['Content-Length']
+ headers['Content-Length'] = length.to_s
+ elsif !body.respond_to?(:call) && (!status || status.to_s[0..2] != '304')
+ headers["Content-Length"] = body.size.to_s
end
- headers["Content-Length"] = headers["Content-Length"].to_s if headers["Content-Length"]
end
def convert_language!
View
7 actionpack/test/controller/render_test.rb
@@ -1218,6 +1218,11 @@ def test_head_with_symbolic_status
assert_equal "404 Not Found", @response.status
assert_response :not_found
+ get :head_with_symbolic_status, :status => "no_content"
+ assert_equal "204 No Content", @response.status
+ assert !@response.headers.include?('Content-Length')
+ assert_response :no_content
+
ActionController::StatusCodes::SYMBOL_TO_STATUS_CODE.each do |status, code|
get :head_with_symbolic_status, :status => status.to_s
assert_equal code, @response.response_code
@@ -1470,7 +1475,7 @@ def test_render_against_etag_request_should_304_when_match
def test_render_against_etag_request_should_have_no_content_length_when_match
@request.if_none_match = etag_for("hello david")
get :render_hello_world_from_variable
- assert !@response.headers.has_key?("Content-Length")
+ assert !@response.headers.has_key?("Content-Length"), @response.headers['Content-Length']
end
def test_render_against_etag_request_should_200_when_no_match

0 comments on commit 431e696

Please sign in to comment.
Something went wrong with that request. Please try again.