mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/webrick/httpresponse.rb (HTTPResponse#setup_header): Close
HTTP/1.1 connection when returning an IO object as response body without setting HTTPResponse#chunked to true. See #855 no.1. * test/webrick/test_httpserver.rb: Test it. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32188 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
908baefe7d
commit
4ce1581475
3 changed files with 40 additions and 0 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
Tue Jun 21 21:50:37 2011 Hiroshi Nakamura <nahi@ruby-lang.org>
|
||||||
|
|
||||||
|
* lib/webrick/httpresponse.rb (HTTPResponse#setup_header): Close
|
||||||
|
HTTP/1.1 connection when returning an IO object as response body
|
||||||
|
without setting HTTPResponse#chunked to true. See #855 no.1.
|
||||||
|
|
||||||
|
* test/webrick/test_httpserver.rb: Test it.
|
||||||
|
|
||||||
Tue Jun 21 21:27:34 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
|
Tue Jun 21 21:27:34 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
|
||||||
|
|
||||||
* internal.h: move rb_thread_io_blocking_region() declaration
|
* internal.h: move rb_thread_io_blocking_region() declaration
|
||||||
|
|
|
@ -204,6 +204,11 @@ module WEBrick
|
||||||
elsif keep_alive?
|
elsif keep_alive?
|
||||||
if chunked? || @header['content-length']
|
if chunked? || @header['content-length']
|
||||||
@header['connection'] = "Keep-Alive"
|
@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"
|
||||||
|
@logger.warn(msg)
|
||||||
|
@header['connection'] = "close"
|
||||||
|
@keep_alive = false
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@header['connection'] = "close"
|
@header['connection'] = "close"
|
||||||
|
|
|
@ -258,6 +258,33 @@ class TestWEBrickHTTPServer < Test::Unit::TestCase
|
||||||
assert_equal(stopped, 1)
|
assert_equal(stopped, 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_response_io_without_chunked_set
|
||||||
|
config = {
|
||||||
|
:ServerName => "localhost"
|
||||||
|
}
|
||||||
|
TestWEBrick.start_httpserver(config){|server, addr, port, log|
|
||||||
|
server.mount_proc("/", lambda { |req, res|
|
||||||
|
r,w = IO.pipe
|
||||||
|
# Test for not setting chunked...
|
||||||
|
# res.chunked = true
|
||||||
|
res.body = r
|
||||||
|
w << "foo"
|
||||||
|
w.close
|
||||||
|
})
|
||||||
|
Thread.pass while server.status != :Running
|
||||||
|
http = Net::HTTP.new(addr, port)
|
||||||
|
req = Net::HTTP::Get.new("/")
|
||||||
|
req['Connection'] = 'Keep-Alive'
|
||||||
|
begin
|
||||||
|
timeout(2) do
|
||||||
|
http.request(req){|res| assert_equal("foo", res.body) }
|
||||||
|
end
|
||||||
|
rescue Timeout::Error
|
||||||
|
flunk('corrupted reponse')
|
||||||
|
end
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
def test_request_handler_callback_is_deprecated
|
def test_request_handler_callback_is_deprecated
|
||||||
requested = 0
|
requested = 0
|
||||||
config = {
|
config = {
|
||||||
|
|
Loading…
Add table
Reference in a new issue