diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-03-28 14:13:08 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-03-28 14:13:08 +0000 |
commit | d32a6d37fe32beffd44e95dd062513cabcc86acb (patch) | |
tree | 63277f9e1251cbcfae60e2d10350b181633e0b56 /ChangeLog | |
parent | 32c00d78a6e94203507bfa57a60ab5a005af6d7b (diff) |
merge revision(s) 60584,62954-62959,63008:
webrick: support Proc objects as body responses
* lib/webrick/httpresponse.rb (send_body): call send_body_proc
(send_body_proc): new method
(class ChunkedWrapper): new class
* test/webrick/test_httpresponse.rb (test_send_body_proc): new test
(test_send_body_proc_chunked): ditto
[Feature #855]
webrick: favor .write over << method
This will make the next change to use IO.copy_stream
easier-to-read. When we can drop Ruby 2.4 support in a few
years, this will allow us to use writev(2) with multiple
arguments for headers and chunked responses.
* lib/webrick/cgi.rb (write): new wrapper method
lib/webrick/httpresponse.rb: (send_header): use socket.write
(send_body_io): ditto
(send_body_string): ditto
(send_body_proc): ditto
(_write_data): ditto
(ChunkedWrapper#write): ditto
(_send_file): ditto
------------------------------------------------------------------------
r62954 | normal | 2018-03-28 17:05:52 +0900 (水, 28 3 2018) | 14 lines
webrick/httpresponse: IO.copy_stream for regular files
Remove the redundant _send_file method since its functionality
is unnecessary with IO.copy_stream. IO.copy_stream also allows
the use of sendfile under some OSes to speed up copies to
non-TLS sockets.
Testing with "curl >/dev/null" and "ruby -run -e httpd" to
read a 1G file over Linux loopback reveals a reduction from
around ~0.770 to ~0.490 seconds on the client side.
* lib/webrick/httpresponse.rb (send_body_io): use IO.copy_stream
(_send_file): remove
[Feature #14237]
------------------------------------------------------------------------
r62955 | normal | 2018-03-28 17:05:57 +0900 (水, 28 3 2018) | 10 lines
webrick: use IO.copy_stream for single range response
This is also compatible with range responses generated
by Rack::File (tested with rack 2.0.3).
* lib/webrick/httpresponse.rb (send_body_io): use Content-Range
* lib/webrick/httpservlet/filehandler.rb (make_partial_content):
use File object for the single range case
* test/webrick/test_filehandler.rb (get_res_body): use send_body
to test result
------------------------------------------------------------------------
r62956 | normal | 2018-03-28 17:06:02 +0900 (水, 28 3 2018) | 7 lines
test/webrick/test_filehandler.rb: stricter multipart range test
We need to ensure we generate compatibile output in
the face of future changes
* test/webrick/test_filehandler.rb (test_make_partial_content):
check response body
------------------------------------------------------------------------
r62957 | normal | 2018-03-28 17:06:08 +0900 (水, 28 3 2018) | 8 lines
webrick: quiet warning for multi-part ranges
Content-Length is ignored by WEBrick::HTTPResponse even if we
calculate it, so instead we chunk responses to HTTP/1.1 clients
and terminate HTTP/1.0 connections.
* lib/webrick/httpservlet/filehandler.rb (make_partial_content):
quiet warning
------------------------------------------------------------------------
r62958 | normal | 2018-03-28 17:06:13 +0900 (水, 28 3 2018) | 7 lines
webrick/httpresponse: make ChunkedWrapper copy_stream-compatible
The .write method needs to return the number of bytes written
to avoid confusing IO.copy_stream.
* lib/webrick/httpresponse.rb (ChunkedWrapper#write): return bytes written
(ChunkedWrapper#<<): return self
------------------------------------------------------------------------
r62959 | normal | 2018-03-28 17:06:18 +0900 (水, 28 3 2018) | 9 lines
webrick: use IO.copy_stream for multipart response
Use the new Proc response body feature to generate a multipart
range response dynamically. We use a flat array to minimize
object overhead as much as possible; as many ranges may fit
into an HTTP request header.
* lib/webrick/httpservlet/filehandler.rb (multipart_body): new method
(make_partial_content): use multipart_body
get rid of test error/failure on Windows introduced at r62955
* lib/webrick/httpresponse.rb (send_body_io): use seek if NotImplementedError
is raised in IO.copy_stream with offset.
* lib/webrick/httpservlet/filehandler.rb (multipart_body): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@63014 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ChangeLog')
-rw-r--r-- | ChangeLog | 98 |
1 files changed, 98 insertions, 0 deletions
@@ -1,3 +1,101 @@ +Wed Mar 28 23:08:46 2018 NAKAMURA Usaku <usa@ruby-lang.org> + + get rid of test error/failure on Windows introduced at r62955 + + * lib/webrick/httpresponse.rb (send_body_io): use seek if + NotImplementedError is raised in IO.copy_stream with offset. + + * lib/webrick/httpservlet/filehandler.rb (multipart_body): ditto. + +Wed Mar 28 23:08:46 2018 Eric Wong <normalperson@yhbt.net> + + webrick: support Proc objects as body responses + + * lib/webrick/httpresponse.rb (send_body): call send_body_proc + (send_body_proc): new method + (class ChunkedWrapper): new class + + * test/webrick/test_httpresponse.rb (test_send_body_proc): new test + (test_send_body_proc_chunked): ditto + [Feature #855] + + webrick: favor .write over << method + + This will make the next change to use IO.copy_stream + easier-to-read. When we can drop Ruby 2.4 support in a few + years, this will allow us to use writev(2) with multiple + arguments for headers and chunked responses. + + * lib/webrick/cgi.rb (write): new wrapper method + lib/webrick/httpresponse.rb: (send_header): use socket.write + (send_body_io): ditto + (send_body_string): ditto + (send_body_proc): ditto + (_write_data): ditto + (ChunkedWrapper#write): ditto + (_send_file): ditto + + webrick/httpresponse: IO.copy_stream for regular files + + Remove the redundant _send_file method since its functionality + is unnecessary with IO.copy_stream. IO.copy_stream also allows + the use of sendfile under some OSes to speed up copies to + non-TLS sockets. + + Testing with "curl >/dev/null" and "ruby -run -e httpd" to + read a 1G file over Linux loopback reveals a reduction from + around ~0.770 to ~0.490 seconds on the client side. + + * lib/webrick/httpresponse.rb (send_body_io): use IO.copy_stream + (_send_file): remove + [Feature #14237] + + webrick: use IO.copy_stream for single range response + + This is also compatible with range responses generated + by Rack::File (tested with rack 2.0.3). + + * lib/webrick/httpresponse.rb (send_body_io): use Content-Range + * lib/webrick/httpservlet/filehandler.rb (make_partial_content): + use File object for the single range case + * test/webrick/test_filehandler.rb (get_res_body): use send_body + to test result + + test/webrick/test_filehandler.rb: stricter multipart range test + + We need to ensure we generate compatibile output in + the face of future changes + + * test/webrick/test_filehandler.rb (test_make_partial_content): + check response body + + webrick: quiet warning for multi-part ranges + + Content-Length is ignored by WEBrick::HTTPResponse even if we + calculate it, so instead we chunk responses to HTTP/1.1 clients + and terminate HTTP/1.0 connections. + + * lib/webrick/httpservlet/filehandler.rb (make_partial_content): + quiet warning + + webrick/httpresponse: make ChunkedWrapper copy_stream-compatible + + The .write method needs to return the number of bytes written + to avoid confusing IO.copy_stream. + + * lib/webrick/httpresponse.rb (ChunkedWrapper#write): return bytes written + (ChunkedWrapper#<<): return self + + webrick: use IO.copy_stream for multipart response + + Use the new Proc response body feature to generate a multipart + range response dynamically. We use a flat array to minimize + object overhead as much as possible; as many ranges may fit + into an HTTP request header. + + * lib/webrick/httpservlet/filehandler.rb (multipart_body): new method + (make_partial_content): use multipart_body + Wed Mar 28 21:24:24 2018 Nobuyoshi Nakada <nobu@ruby-lang.org> unixsocket.c: abstract namespace |