My previous statement was not entirely correct as the Content-Length
header is not set for ALL traffic, but just in case Content-Length is
not set already. However, I'd still suggest to move the fix to where
it belongs (in my opinion).
On 2021-05-20 06:43, Matthias Pressfreund wrote:
> Fix works for me, too. Thanks.
>
> It now sets the "Content-Length: 0" header for ALL traffic that
> is not chunk-encoded. But chunk-encoding may be disabled already
> (e.g. for http/1.0). I'd therefore suggest to move the fix to where
> the handling of zero-length bodies actually takes place.
>
>
> --- usr.sbin/httpd/server_fcgi.c Thu May 20 05:57:23 2021
> +++ usr.sbin/httpd/server_fcgi.c Thu May 20 06:03:40 2021
> @@ -620,6 +620,12 @@
> EVBUFFER_LENGTH(clt->clt_srvevb) == 0) {
> /* Can't chunk encode an empty body. */
> clt->clt_fcgi.chunked = 0;
> + key.kv_key = "Content-Length";
> + if ((kv = kv_find(&resp->http_headers, &key)) == NULL) {
> + if (kv_add(&resp->http_headers,
> + "Content-Length", "0") == NULL)
> + return (-1);
> + }
> }
>
> /* Set chunked encoding */
> @@ -636,13 +642,6 @@
> if (kv_add(&resp->http_headers,
> "Transfer-Encoding", "chunked") == NULL)
> return (-1);
> - } else {
> - key.kv_key = "Content-Length";
> - if ((kv = kv_find(&resp->http_headers, &key)) == NULL) {
> - if (kv_add(&resp->http_headers,
> - "Content-Length", "0") == NULL)
> - return (-1);
> - }
> }
>
> /* Is it a persistent connection? */
>
>