From mboxrd@z Thu Jan 1 00:00:00 1970 Delivered-To: chneukirchen@gmail.com Received: by 10.204.72.79 with SMTP id l15cs255690bkj; Wed, 1 Jul 2009 15:58:56 -0700 (PDT) Received-SPF: pass (google.com: domain of grbounce-ceibQwUAAAB4YPBqaDIjI2bFOCxyyh3G=chneukirchen=gmail.com@googlegroups.com designates 10.220.72.6 as permitted sender) client-ip=10.220.72.6; Authentication-Results: mr.google.com; spf=pass (google.com: domain of grbounce-ceibQwUAAAB4YPBqaDIjI2bFOCxyyh3G=chneukirchen=gmail.com@googlegroups.com designates 10.220.72.6 as permitted sender) smtp.mail=grbounce-ceibQwUAAAB4YPBqaDIjI2bFOCxyyh3G=chneukirchen=gmail.com@googlegroups.com; dkim=pass header.i=grbounce-ceibQwUAAAB4YPBqaDIjI2bFOCxyyh3G=chneukirchen=gmail.com@googlegroups.com Received: from mr.google.com ([10.220.72.6]) by 10.220.72.6 with SMTP id k6mr12749966vcj.5.1246489135702 (num_hops = 1); Wed, 01 Jul 2009 15:58:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=beta; h=domainkey-signature:received:received:x-sender:x-apparently-to :received:received:received-spf:authentication-results:received:date :from:to:cc:subject:message-id:mime-version:content-type :content-disposition:user-agent:reply-to:sender:precedence :x-google-loop:mailing-list:list-id:list-post:list-help :list-unsubscribe:x-beenthere-env:x-beenthere; bh=K7Bo/UWcQ8uvUlnbkeipSMRr5PPK1MQo479sW2XmVQU=; b=Rip4t1JhCUDHHASGaA9nn0Fm85R/o34g3BGEK88QhCPNVsVoeQ+6AOICiBwq2ejlwD aug39vyoSKhd5Oly7IknUORMUkQroAhlpNE42mWIJhOa6ejfeX1hBR+fkE+WsNNZx8jR 4s2UJHKuojub7KkNMTzMxt8u423TniyP187HY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlegroups.com; s=beta; h=x-sender:x-apparently-to:received-spf:authentication-results:date :from:to:cc:subject:message-id:mime-version:content-type :content-disposition:user-agent:reply-to:sender:precedence :x-google-loop:mailing-list:list-id:list-post:list-help :list-unsubscribe:x-beenthere-env:x-beenthere; b=jqOGZJIHgy8Ll8wVIjvCRsCOAELyePoPIjolVk9VFQTTBJVNRK1/HksU47r2aLliVJ 35b+nsdl6K3JZCy/kF3sl8P+PiLJ8Bt/q15n56D8AoxVQnLaEJWtwtiCjO9lRKQWVDgo 2ktQ5lw3gfkRG96Z47MXHYft3MQr0QZsAwhF8= Received: by 10.220.72.6 with SMTP id k6mr1812675vcj.5.1246489135477; Wed, 01 Jul 2009 15:58:55 -0700 (PDT) Received: by 10.230.110.72 with SMTP id m8gr1483vbp.0; Wed, 01 Jul 2009 15:58:46 -0700 (PDT) X-Sender: normalperson@yhbt.net X-Apparently-To: rack-devel@googlegroups.com Received: by 10.142.192.3 with SMTP id p3mr666442wff.2.1246489125808; Wed, 01 Jul 2009 15:58:45 -0700 (PDT) Return-Path: Received: from dcvr.yhbt.net (dcvr.yhbt.net [64.71.152.64]) by gmr-mx.google.com with ESMTP id 23si172378pxi.13.2009.07.01.15.58.45; Wed, 01 Jul 2009 15:58:45 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of normalperson@yhbt.net designates 64.71.152.64 as permitted sender) client-ip=64.71.152.64; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: best guess record for domain of normalperson@yhbt.net designates 64.71.152.64 as permitted sender) smtp.mail=normalperson@yhbt.net Received: from localhost (user-118bg3p.cable.mindspring.com [66.133.192.121]) (using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPSA id D5E481F79A; Wed, 1 Jul 2009 22:58:44 +0000 (UTC) Date: Wed, 1 Jul 2009 15:58:44 -0700 From: Eric Wong To: mongrel-unicorn@rubyforge.org, ruby-talk@ruby-lang.org, rack-devel@googlegroups.com Cc: mongrel-development@rubyforge.org Subject: [ANN] unicorn 0.9.0 (experimental release) Message-ID: <20090701225843.GA7475@dcvr.yhbt.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.18 (2008-05-17) Reply-To: rack-devel@googlegroups.com Sender: rack-devel@googlegroups.com Precedence: bulk X-Google-Loop: groups Mailing-List: list rack-devel@googlegroups.com; contact rack-devel+owner@googlegroups.com List-Id: List-Post: List-Help: List-Unsubscribe: , X-BeenThere-Env: rack-devel@googlegroups.com X-BeenThere: rack-devel@googlegroups.com Unicorn is a Rack HTTP server for Unix, fast clients and nothing else[1] We now have support for "Transfer-Encoding: chunked" bodies in requests. Not only that, Rack applications reading input bodies get that data streamed off to the client socket on an as-needed basis. This allows the application to do things like upload progress notification and even tunneling of arbitrary stream protocols via bidirectional chunked encoding. See Unicorn::App::Inetd and examples/git.ru (including the comments) for an example of tunneling the git:// protocol over HTTP. This release also gives applications the ability to respond positively to "Expect: 100-continue" headers before being rerun without closing the socket connection. See Unicorn::App::Inetd for an example of how this is used. This release is NOT recommended for production use. Eric Wong (43): http_request: no need to reset the request http_request: StringIO is binary for empty bodies (1.9) http_request: fix typo for 1.9 Transfer-Encoding: chunked streaming input support Unicorn::App::Inetd: reinventing Unix, poorly :) README: update with mailing list info local.mk.sample: publish_doc gzips all html, js, css Put copyright text in new files, include GPL2 text examples/cat-chunk-proxy: link to proposed curl(1) patch Update TODO Avoid duplicating the "Z" constant Optimize body-less GET/HEAD requests (again) tee_input: Don't expose the @rd object as a return value exec_cgi: small cleanups README: another note about older Sinatra tee_input: avoid defining a @rd.size method Make TeeInput easier to use test_upload: add tests for chunked encoding GNUmakefile: more stringent error checking in tests test_upload: fix ECONNRESET with 1.9 GNUmakefile: allow TRACER= to be specified for tests test_rails: workaround long-standing 1.9 bug tee_input: avoid rereading fresh data "Fix" tests that break with stream_input=false inetd: fix broken constant references configurator: provide stream_input (true|false) option chunked_reader: simpler interface http_request: force BUFFER to be Encoding::BINARY ACK clients on "Expect: 100-continue" header Only send "100 Continue" when no body has been sent http_request: tighter Transfer-Encoding: "chunked" check Add trailer_parser for parsing trailers chunked_reader: Add test for chunk parse failure TeeInput: use only one IO for tempfile trailer_parser: set keys with "HTTP_" prefix TrailerParser integration into ChunkedReader Unbind listeners as before stopping workers Retry listen() on EADDRINUSE 5 times ever 500ms Re-add support for non-portable socket options Move "Expect: 100-continue" handling to the app tee_input: avoid ignoring initial body blob Force streaming input onto apps by default unicorn 0.9.0 * site: http://unicorn.bogomips.org/ * git: git://git.bogomips.org/unicorn.git * http+git: http://git.bogomips.org:8080/unicorn.git [1] * cgit: http://git.bogomips.org/cgit/unicorn.git/ * list: mongrel-unicorn@rubyforge.org [1] - Actually, most of the new features in this release should in fact work on non-Unix OSes so they can be adapted for other servers with wider audiences. [2] - This is the git:// protocol tunneled inside a bidirectional "Transfer-Encoding: chunked" request/response using this latest release of Unicorn. -- Eric Wong