diff options
author | Eric Wong <e@80x24.org> | 2013-11-12 21:14:06 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2013-11-12 21:14:06 +0000 |
commit | f7c45b50ae9c042ba8bd78658ba8132fdaf96096 (patch) | |
tree | a79fb7d4003314081ecce5bdfaef886b6fece444 | |
parent | 7dbf0de3f00d6400526f7742904d56cd5eb5629b (diff) | |
download | yahns-f7c45b50ae9c042ba8bd78658ba8132fdaf96096.tar.gz |
Leave that up to Rack::Chunked/Rack::ContentLength. Chunking ourselves interacts badly with Rack::Deflater, since Deflater will blindly deflate already-chunked portions.
-rw-r--r-- | extras/exec_cgi.rb | 17 | ||||
-rw-r--r-- | test/test_extras_exec_cgi.rb | 9 |
2 files changed, 8 insertions, 18 deletions
diff --git a/extras/exec_cgi.rb b/extras/exec_cgi.rb index 89fc9b4..39042af 100644 --- a/extras/exec_cgi.rb +++ b/extras/exec_cgi.rb @@ -8,19 +8,15 @@ class ExecCgi class MyIO < Kgio::Pipe attr_writer :my_pid attr_writer :body_tip - attr_writer :chunked def each buf = @body_tip || "" if buf.size > 0 - buf = "#{buf.size.to_s(16)}\r\n#{buf}\r\n" if @chunked yield buf end while tmp = kgio_read(8192, buf) - tmp = "#{tmp.size.to_s(16)}\r\n#{tmp}\r\n" if @chunked yield tmp end - yield("0\r\n\r\n") if @chunked self ensure # do this sooner, since the response body may be buffered, we want @@ -90,7 +86,8 @@ class ExecCgi end head, body = head.split(/\r?\n\r?\n/) pipe.body_tip = body - pipe.chunked = false + + env["HTTP_VERSION"] ||= "HTTP/1.0" # stop Rack::Chunked for HTTP/0.9 headers = Rack::Utils::HeaderHash.new prev = nil @@ -101,16 +98,6 @@ class ExecCgi end end status = headers.delete("Status") || 200 - unless headers.include?("Content-Length") || - headers.include?("Transfer-Encoding") - case env['HTTP_VERSION'] - when 'HTTP/1.0', nil - # server will drop connection anyways - else - headers["Transfer-Encoding"] = "chunked" - pipe.chunked = true - end - end errbody = nil [ status, headers, pipe ] else diff --git a/test/test_extras_exec_cgi.rb b/test/test_extras_exec_cgi.rb index c5c190d..6fa4dbb 100644 --- a/test/test_extras_exec_cgi.rb +++ b/test/test_extras_exec_cgi.rb @@ -17,7 +17,8 @@ class TestExtrasExecCGI < Testcase pid = mkserver(cfg) do require './extras/exec_cgi' cfg.instance_eval do - app(:rack, ExecCgi.new(RUNME)) { listen "#{host}:#{port}" } + stack = Rack::ContentLength.new(Rack::Chunked.new(ExecCgi.new(RUNME))) + app(:rack, stack) { listen "#{host}:#{port}" } stderr_path err.path worker_processes 1 end @@ -96,7 +97,8 @@ class TestExtrasExecCGI < Testcase pid = mkserver(cfg) do require './extras/exec_cgi' cfg.instance_eval do - app(:rack, ExecCgi.new(RUNME)) { listen "#{host}:#{port}" } + stack = Rack::ContentLength.new(Rack::Chunked.new(ExecCgi.new(RUNME))) + app(:rack, stack) { listen "#{host}:#{port}" } stderr_path err.path worker_processes 1 end @@ -133,7 +135,8 @@ class TestExtrasExecCGI < Testcase Yahns::HttpClient.__send__(:include, TrywriteBlocked) require './extras/exec_cgi' cfg.instance_eval do - app(:rack, ExecCgi.new(RUNME)) { listen "#{host}:#{port}" } + stack = Rack::ContentLength.new(Rack::Chunked.new(ExecCgi.new(RUNME))) + app(:rack, stack) { listen "#{host}:#{port}" } stderr_path err.path worker_processes 1 end |