Edit report at http://bugs.php.net/bug.php?id=44164&edit=1

 ID:                 44164
 Updated by:         cataphr...@php.net
 Reported by:        mplomer at gmx dot de
 Summary:            Handle "Content-Length" HTTP header when
                     zlib.output_compression active
 Status:             Assigned
 Type:               Bug
 Package:            *General Issues
 Operating System:   *
 PHP Version:        5.2.5
 Assigned To:        cataphract
 Block user comment: N
 Private report:     N

 New Comment:

Sorry for the mess; I was betrayed by the browser's autocomplete.


Previous Comments:
------------------------------------------------------------------------
[2010-12-14 04:58:30] cataphr...@php.net

> Our projects make heavy use of Content-Length. Disabling it
unnecessarily is

> costly on networks with large RTT.



The problem is not the existence of a Content-length header, it's the
fact that you're setting a content-length header indicating a size you
cannot possibly know. A wrong Content-length header is worse than none.



Apache already adds a Content-length header when it can (i.e. for small
responses), it's not necessary PHP does this; sending it on every
compressed response is unpractical because it would require buffering
the entire response. If you need this, I suppose you can always
explicitly start the zlib output handler and call ob_get_length.

------------------------------------------------------------------------
[2010-12-14 04:57:52] cataphr...@php.net

> Our projects make heavy use of Content-Length. Disabling it
unnecessarily is

> costly on networks with large RTT.



The problem is not the existence of a Content-length header, it's the
fact that you're setting a content-length header indicating a size you
cannot possibly know. A wrong Content-length header is worse than none.



Apache already adds a Content-length header when it can (i.e. for small
responses), it's not necessary PHP does this; sending it on every
compressed response is unpractical because it would require buffering
the entire response. If you need this, I suppose you can always
explicitly start the zlib output handler and call ob_get_length.

------------------------------------------------------------------------
[2010-12-13 17:45:21] panczel dot levente at groware dot hu

Our projects make heavy use of Content-Length. Disabling it
unnecessarily is costly on networks with large RTT.

I also do not agree that manipulating Content-Length is a bad thing to
do for output handlers. To give a correct Content-Length (whenever
possible) is the task of the handler just as setting the
"Content-Encoding: gzip" is.

I'd vote for a solution where zlib output generates a correct
Content-Length whenever it has the opportunity (regarding the current
settings). The most straightforward solution I can imagine is that the
output compression module waits until the first buffer flush and then
right before writing to its output it checks whether the input has
finished [i.e. the whole page is buffered] and that the
compressed+encoded length is known; then it sets the correct
Content-Length. If, but _only_ if any of the above requirements are not
met (input still pending, compressed size is unknown for compression
cannot complete without flushing first) then clear Content-Length and
flush (so it cannot be set anymore).

I think this would maintain correctness, does not need additional
resources (like extra buffering), but keeps the benefits of sending
Content-Length whenever possible. (This last one I find to be a huge
benefit with pages that include many generated CSS-parts or for pages
that dynamically load many files, like dojo.)

------------------------------------------------------------------------
[2010-11-18 05:09:04] cataphr...@php.net

Automatic comment from SVN on behalf of cataphract
Revision: http://svn.php.net/viewvc/?view=revision&revision=305481
Log: - Reversed implementation of FR #44164, pending further
consideration.
  See rev #304903.

------------------------------------------------------------------------
[2010-10-30 18:32:34] cataphr...@php.net

I'm reopening as the general opinion seems to be that the content-length
header should be suppressed instead of disabling compression.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    http://bugs.php.net/bug.php?id=44164


-- 
Edit this bug report at http://bugs.php.net/bug.php?id=44164&edit=1

Reply via email to