2016-11-30 18:46 GMT+01:00 Luca Toscano <toscano.l...@gmail.com>:

> Hi everybody,
>
> while working on https://bz.apache.org/bugzilla/show_bug.cgi?id=51350 a
> user asked why httpd send the "Content-Length: 0" header for HTTP 204
> responses given the following statement in the RFC:
>
> https://tools.ietf.org/html/rfc7230#page-30
> "A server MUST NOT send a Content-Length header field in any response with
> a status code of 1xx (Informational) or 204 (No Content)."
>
> I tried with a simple PHP script returning an HTTP 204 header (via
> mod_proxy_fcgi) and indeed I can see the Content-Length: 0. After a bit of
> digging it seems that ap_content_length_filter in protocol.c adds the
> header when it evaluates:
>
>         if (!(r->header_only
>               && !r->bytes_sent
>               && (r->sent_bodyct
>                   || conf->http_cl_head_zero != AP_HTTP_CL_HEAD_ZERO_ENABLE
>                   || apr_table_get(r->headers_out, "Content-Length")))) {
>             ap_set_content_length(r, r->bytes_sent);
>         }
>
> An idea to fix the issue after a bit of chat on IRC could be the following
> snippet, even if it might no be the right move. Since I am not expert
> enough to attempt any code change to http_filters.c or protocol.c, I'll
> wait for some feedback about how to proceed (that might also be "don't do
> anything, it is fine in this way" :)
>
> Thanks!
>
> Luca
>
> Index: modules/http/http_filters.c
> ===================================================================
> --- modules/http/http_filters.c (revision 1772052)
> +++ modules/http/http_filters.c (working copy)
> @@ -1296,6 +1296,10 @@
>          apr_table_unset(r->headers_out, "Content-Length");
>      }
>
> +    if ((r->status == HTTP_NO_CONTENT || ap_is_HTTP_INFO(r->status)) &&
> !r->bytes_sent) {
> +        apr_table_unset(r->headers_out, "Content-Length");
> +    }
> +
>      ctype = ap_make_content_type(r, r->content_type);
>      if (ctype) {
>          apr_table_setn(r->headers_out, "Content-Type", ctype);
>
>
Any feedback?

Thanks!

Luca

Reply via email to