about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2016-04-29 07:36:47 +0000
committerEric Wong <e@80x24.org>2016-04-29 07:53:54 +0000
commit4968041a7e1ff90b920704f50fccb9e7968d0d99 (patch)
tree7cdb96278268ff5dbb74c361b1a9b86ab53978c0
parentd16326723dcbc0a58e5a91078eac6a6058441702 (diff)
downloadyahns-4968041a7e1ff90b920704f50fccb9e7968d0d99.tar.gz
Ugh, it sucks that other servers are so tolerant of violations
of the Rack spec.  Rainbows! had the same problem:

https://bogomips.org/rainbows-public/20140704195032.GA13152@dcvr.yhbt.net/
-rw-r--r--Documentation/yahns-rackup.pod10
-rw-r--r--examples/yahns_rack_basic.conf.rb6
2 files changed, 16 insertions, 0 deletions
diff --git a/Documentation/yahns-rackup.pod b/Documentation/yahns-rackup.pod
index efdfb6d..6172661 100644
--- a/Documentation/yahns-rackup.pod
+++ b/Documentation/yahns-rackup.pod
@@ -159,6 +159,16 @@ The RACK_ENV variable is set by the aforementioned -E switch.
 If RACK_ENV is already set, it will be used unless -E is used.
 See rackup documentation for more details.
 
+=head1 CAVEATS
+
+yahns is strict about buggy, non-compliant Rack applications.
+Some existing servers work fine without "Content-Length" or
+"Transfer-Encoding: chunked" response headers enforced by Rack::Lint.
+Forgetting these headers with yahns causes clients to stall as they
+assume more data is coming.  Loading the Rack::ContentLength and/or
+Rack::Chunked middlewares will set the necessary response headers
+and fix your app.
+
 =head1 CONTACT
 
 All feedback welcome via plain-text mail to L<mailto:yahns-public@yhbt.net>
diff --git a/examples/yahns_rack_basic.conf.rb b/examples/yahns_rack_basic.conf.rb
index f3f8e6a..610a482 100644
--- a/examples/yahns_rack_basic.conf.rb
+++ b/examples/yahns_rack_basic.conf.rb
@@ -30,6 +30,12 @@ queue do
   worker_threads 50
 end
 
+# note: Rack requires responses set "Content-Length" or use
+# "Transfer-Encoding: chunked".  Some Rack servers tolerate
+# the lack of these, yahns does not.  Thus you should load
+# Rack::Chunked and/or Rack::ContentLength middleware in your
+# config.ru to ensure clients know when your application
+# responses terminate.
 app(:rack, "config.ru", preload: false) do
   listen 80