1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/lib/webrick
nagachika c461bdc3c5 merge revision(s) 60584,62954,62955,62956,62957,62958,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/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

	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_4@63012 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-28 13:54:58 +00:00
..
httpauth merge revision(s) 62960,62961,62962,62963,62964,62965: 2018-03-28 12:23:29 +00:00
httpservlet merge revision(s) 60584,62954,62955,62956,62957,62958,62959,63008: 2018-03-28 13:54:58 +00:00
accesslog.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
cgi.rb merge revision(s) 62953: 2018-03-28 09:39:53 +00:00
compat.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
config.rb Delay Utils.getservername until needed. 2016-12-07 12:59:48 +00:00
cookie.rb * lib/cgi/cookie.rb (parse): don't allow , as a separator. [Bug #12791] 2016-09-27 03:17:47 +00:00
htmlutils.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
httpauth.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
httpproxy.rb stdlib: avoid extra calls to eliminate "\n" from Base64 2016-01-10 00:35:43 +00:00
httprequest.rb merge revision(s) 62960,62961,62962,62963,62964,62965: 2018-03-28 12:23:29 +00:00
httpresponse.rb merge revision(s) 60584,62954,62955,62956,62957,62958,62959,63008: 2018-03-28 13:54:58 +00:00
https.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
httpserver.rb merge revision(s) 61197: [Backport #14184] 2017-12-14 13:14:12 +00:00
httpservlet.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
httpstatus.rb merge revision(s) 59897: 2017-09-14 11:24:10 +00:00
httputils.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
httpversion.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00
log.rb merge revision(s) 59897: 2017-09-14 11:24:10 +00:00
server.rb merge revision(s) 60123,60172,60189,60208,60210,60211: [Backport #14005] 2017-12-14 13:31:41 +00:00
ssl.rb * lib/webrick/ssl.rb: Accept string value for SSLCertName. It is used 2016-05-07 13:37:18 +00:00
utils.rb webrick: use monotonic clock for timeouts 2016-10-14 01:48:52 +00:00
version.rb Add frozen_string_literal: false for all files 2015-12-16 05:07:31 +00:00