diff --git a/lib/webrick/httpresponse.rb b/lib/webrick/httpresponse.rb index 0d36c07..ce72b3f 100644 --- a/lib/webrick/httpresponse.rb +++ b/lib/webrick/httpresponse.rb @@ -202,7 +202,7 @@ module WEBrick if @header['connection'] == "close" @keep_alive = false elsif keep_alive? - if chunked? || @header['content-length'] + if chunked? || @header['content-length'] || @status == 304 || @status == 204 @header['connection'] = "Keep-Alive" else msg = "Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true" diff --git a/test/webrick/test_httpresponse.rb b/test/webrick/test_httpresponse.rb new file mode 100644 index 0000000..3967e2c --- /dev/null +++ b/test/webrick/test_httpresponse.rb @@ -0,0 +1,46 @@ +require "webrick" +require "minitest/autorun" + +module WEBrick + class TestHTTPResponse < MiniTest::Unit::TestCase + class FakeLogger + attr_reader :messages + + def initialize + @messages = [] + end + + def warn msg + @messages << msg + end + end + + def test_304_does_not_log_warning + logger = FakeLogger.new + config = Config::HTTP + config[:Logger] = logger + + res = HTTPResponse.new config + res.status = 304 + res.keep_alive = true + + res.setup_header + + assert_equal 0, logger.messages.length + end + + def test_204_does_not_log_warning + logger = FakeLogger.new + config = Config::HTTP + config[:Logger] = logger + + res = HTTPResponse.new config + res.status = 204 + res.keep_alive = true + + res.setup_header + + assert_equal 0, logger.messages.length + end + end +end