Index: extras/ajp/src/main/java/org/mortbay/jetty/ajp/Ajp13Parser.java
===================================================================
--- extras/ajp/src/main/java/org/mortbay/jetty/ajp/Ajp13Parser.java	(revision 2039)
+++ extras/ajp/src/main/java/org/mortbay/jetty/ajp/Ajp13Parser.java	(working copy)
@@ -342,7 +342,7 @@
                 if (bufHeaderName != null && bufHeaderName.toString().equals(Ajp13RequestHeaders.CONTENT_LENGTH))
                 {
                     _contentLength = BufferUtil.toLong(bufHeaderValue);
-                    if (_contentLength <= 0)
+                    if (_contentLength == 0)
                         _contentLength = HttpTokens.NO_CONTENT;
                 }
 
@@ -464,7 +464,7 @@
             _contentPosition = 0;
             switch ((int) _contentLength)
             {
-                case HttpTokens.UNKNOWN_CONTENT:
+
                 case HttpTokens.NO_CONTENT:
                     _state = STATE_END;
                     _handler.headerComplete();
@@ -472,6 +472,28 @@
 
                     break;
 
+                case HttpTokens.UNKNOWN_CONTENT:
+
+                    if (_buffers != null && _body == null && _buffer == _header && _header.length() <= 0)
+                    {
+                        _body = _buffers.getBuffer(Ajp13Packet.MAX_PACKET_SIZE);
+                        _body.clear();
+
+                    }
+
+                    _state = STATE_AJP13CHUNK_START;
+
+                    _generator.getBodyChunk();
+
+                    total_filled += fill();
+                    _generator.gotBody();
+
+
+                    _handler.headerComplete(); // May recurse here!
+
+
+                    return total_filled;
+
                 default:
 
                     if (_buffers != null && _body == null && _buffer == _header && _contentLength > (_header.capacity() - _header.getIndex()))
@@ -514,6 +536,7 @@
                     if (_chunkLength==0)
                     {
                         _state=STATE_END;
+                         _generator.gotBody();
                         _handler.messageComplete(_contentPosition);
                         return total_filled;
                     }
@@ -561,7 +584,7 @@
                     if (remaining==0)
                     {
                         _state=STATE_AJP13CHUNK_START;
-                        if (_contentPosition<_contentLength)
+                        if (_contentPosition<_contentLength || _contentLength == HttpTokens.UNKNOWN_CONTENT)
                         {
                             _generator.getBodyChunk();
                         }

