1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/lib
usa d32a6d37fe 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
2018-03-28 14:13:08 +00:00
..
cgi
drb merge revision(s) 55008: [Backport #12342] 2016-08-11 18:30:09 +00:00
irb merge revision(s) 57027: [Backport #13012] 2017-03-27 16:09:31 +00:00
matrix
net merge revision(s) 61639: [Backport #14323] 2018-03-28 05:41:54 +00:00
optparse
racc
rbconfig
rdoc
rexml merge revision(s) 59584: [Backport #13850] 2017-09-09 13:42:22 +00:00
rinda
rss merge revision(s) 58552: [Backport #13531] 2017-06-30 12:48:27 +00:00
rubygems merge revision(s) 58471,58493,62436: [Backport #13505] 2018-02-16 16:21:44 +00:00
shell
unicode_normalize
uri merge revision(s) 56139,57066,57099,57100: [Backport #10774] 2017-03-27 11:13:31 +00:00
webrick merge revision(s) 60584,62954-62959,63008: 2018-03-28 14:13:08 +00:00
xmlrpc
yaml
abbrev.rb
base64.rb
benchmark.rb
cgi.rb
cmath.rb
csv.rb
debug.rb
delegate.rb
drb.rb
e2mmap.rb
English.rb
erb.rb merge revision(s) 58825,58826: [Backport #5339] 2017-06-30 11:24:41 +00:00
fileutils.rb merge revision(s) 57640: [Backport #13214] 2017-03-27 16:57:39 +00:00
find.rb
forwardable.rb merge revision(s) 55372: [Backport #14179] 2018-03-18 15:04:49 +00:00
getoptlong.rb
ipaddr.rb
irb.rb
logger.rb merge revision(s) 56374: [Backport #12822] 2016-10-17 17:38:53 +00:00
mathn.rb
matrix.rb
mkmf.rb merge revision(s) 55265: [Backport #14182] 2018-01-31 10:52:30 +00:00
monitor.rb
mutex_m.rb
observer.rb
open-uri.rb
open3.rb
optionparser.rb
optparse.rb merge revision(s) 59312: [Backport #13739] 2017-08-09 07:56:52 +00:00
ostruct.rb merge revision(s) 57887: [Backport #13159] 2018-01-31 11:05:38 +00:00
pp.rb
prettyprint.rb
prime.rb
profile.rb
profiler.rb
pstore.rb
rdoc.rb
resolv-replace.rb
resolv.rb merge revision(s) 62671: [Backport #14571] 2018-03-28 06:03:13 +00:00
rss.rb
rubygems.rb merge revision(s) 58471,58493,62436: [Backport #13505] 2018-02-16 16:21:44 +00:00
scanf.rb
securerandom.rb
set.rb
shell.rb
shellwords.rb
singleton.rb
sync.rb
tempfile.rb merge revision(s) 57972: [Backport #13198] 2017-03-27 14:47:38 +00:00
thwait.rb
time.rb
timeout.rb
tmpdir.rb merge revision(s) 62990: 2018-03-28 10:29:15 +00:00
tracer.rb
tsort.rb
ubygems.rb
un.rb
unicode_normalize.rb
uri.rb
weakref.rb
webrick.rb
xmlrpc.rb
yaml.rb