# Unicorn 0.9.0 (experimental release)

**URL:** <https://www.ruby-forum.com/t/unicorn-0-9-0-experimental-release/171413>\
**Category:** Ruby\
**Created:** [July 2, 2009, 1:01am UTC](https://www.ruby-forum.com/t/unicorn-0-9-0-experimental-release/171413 "2009-07-02T01:01:41Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![ericw](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/e/97f17d/32.png) [@ericw](https://www.ruby-forum.com/u/ericw)\
**Post date:** [July 2, 2009, 1:01am UTC](https://www.ruby-forum.com/t/unicorn-0-9-0-experimental-release/171413/1 "2009-07-02T01:01:41Z")

</div>

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 W. (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/](http://unicorn.bogomips.org/)
- git: git://git.bogomips.org/unicorn.git
- http+git: [http://git.bogomips.org:8080/unicorn.git](http://git.bogomips.org:8080/unicorn.git) [1]
- cgit: [Rack HTTP server for Unix and fast clients](http://git.bogomips.org/cgit/unicorn.git/)
- list: removed\_email\_address@domain.invalid

[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.
