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 cgi/escape: Optimize CGI.escapeHTML 2015-12-20 11:54:54 +00:00
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 Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
net merge revision(s) 61639: [Backport #14323] 2018-03-28 05:41:54 +00:00
optparse Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
racc Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
rbconfig Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
rdoc * lib/rdoc.rb: bump version to 4.2.1. It contains following fixes. 2015-12-22 12:08:13 +00:00
rexml merge revision(s) 59584: [Backport #13850] 2017-09-09 13:42:22 +00:00
rinda Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
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 Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
unicode_normalize Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
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 merge revision(s) 53318: [Backport #11489] 2016-03-29 05:43:04 +00:00
yaml Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
abbrev.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
base64.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
benchmark.rb [DOC] Fix typos 2015-12-23 03:43:23 +00:00
cgi.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
cmath.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
csv.rb csv.rb: Fix typo [ci skip 2015-12-19 05:23:50 +00:00
debug.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
delegate.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
drb.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
e2mmap.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
English.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
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 Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
forwardable.rb merge revision(s) 55372: [Backport #14179] 2018-03-18 15:04:49 +00:00
getoptlong.rb [DOC] Fix typos 2015-12-23 03:43:23 +00:00
ipaddr.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
irb.rb merge revision(s) 53943: [Backport #11969] 2016-03-29 06:10:16 +00:00
logger.rb merge revision(s) 56374: [Backport #12822] 2016-10-17 17:38:53 +00:00
mathn.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
matrix.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
mkmf.rb merge revision(s) 55265: [Backport #14182] 2018-01-31 10:52:30 +00:00
monitor.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
mutex_m.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
observer.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
open-uri.rb * lib/net/ftp.rb (initialize): Connections are in passive mode per 2015-11-11 03:48:45 +00:00
open3.rb * lib/open3.rb: Specify frozen_string_literal: true. 2015-11-14 07:43:23 +00:00
optionparser.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
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 * lib/open-uri.rb: Remove indicator for "frozen_string_literal: true". 2015-11-10 11:48:14 +00:00
prettyprint.rb * lib/open-uri.rb: Remove indicator for "frozen_string_literal: true". 2015-11-10 11:48:14 +00:00
prime.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
profile.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
profiler.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
pstore.rb [DOC] Fix typos 2015-12-23 03:43:23 +00:00
rdoc.rb * lib/rdoc.rb: bump version to 4.2.1. It contains following fixes. 2015-12-22 12:08:13 +00:00
resolv-replace.rb * lib/resolv-replace.rb: Specify frozen_string_literal: true. 2015-11-14 08:25:30 +00:00
resolv.rb merge revision(s) 62671: [Backport #14571] 2018-03-28 06:03:13 +00:00
rss.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
rubygems.rb merge revision(s) 58471,58493,62436: [Backport #13505] 2018-02-16 16:21:44 +00:00
scanf.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
securerandom.rb merge revision(s) 54144,54699: [Backport #12139] 2016-04-22 15:30:27 +00:00
set.rb * lib/set.rb: Enable frozen_string_literal. 2015-11-16 07:41:30 +00:00
shell.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
shellwords.rb remove duplicated frozen_string_literal magic comment 2015-12-16 09:25:48 +00:00
singleton.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
sync.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
tempfile.rb merge revision(s) 57972: [Backport #13198] 2017-03-27 14:47:38 +00:00
thwait.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
time.rb * lib/time.rb: Use "<<" to reduce string allocation. 2015-11-14 12:45:30 +00:00
timeout.rb timeout.rb: watcher thread name 2015-12-18 15:46:50 +00:00
tmpdir.rb merge revision(s) 62990: 2018-03-28 10:29:15 +00:00
tracer.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
tsort.rb * lib/tsort.rb: Specify frozen_string_literal: true. 2015-11-14 08:46:11 +00:00
ubygems.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
un.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
unicode_normalize.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
uri.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
weakref.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
webrick.rb [DOC] Fix typos 2015-12-23 03:43:23 +00:00
xmlrpc.rb [DOC] Fix typos 2015-12-23 03:43:23 +00:00
yaml.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00