]> granicus.if.org Git - apache/commitdiff
Force mod_proxy_fcgi to read the whole FCGI response
authorLuca Toscano <elukey@apache.org>
Tue, 12 Jul 2016 21:13:37 +0000 (21:13 +0000)
committerLuca Toscano <elukey@apache.org>
Tue, 12 Jul 2016 21:13:37 +0000 (21:13 +0000)
even when the content has not been modified (HTTP 304).

The problem is described in PR 59838. This patch should
avoid bogus reads causing the following issues with
HTTP 304 responses:
- AH01068: Got bogus version X, expected 1
- AH01069: Got bogus rid X, expected 1
- AH01075: Error dispatching request to :
- HTTP 503 logged instead of 304 (even if the external
  client gets correctly a 304)

As discussed on IRC the HTTP_PRECONDITION_FAILED use case
should be handled like the HTTP_NOT_MODIFIED one but it will
be done in a separate commit.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1752347 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
modules/proxy/mod_proxy_fcgi.c

diff --git a/CHANGES b/CHANGES
index d5515d0aa0a4b1dc363632a059d17578e15df39c..3a6bb8fd00b63e9610d74ffeaa54c5b4ff35c02b 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,10 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.0
 
+  *) mod_proxy_fcgi: read the whole FCGI response even when the content has
+     not been modified (HTTP 304) to avoid subsequent bougus reads and
+     confusing error messages logged. [Luca Toscano]
+
   *) mod_http2: removing timeouts on master connection while requests are
      being processed. Requests may timeout, but the master only times out when
      no more requests are active. [Stefan Eissing]
index 1be9a091f857a4f098ccfa833ededd29bb8327f2..7737642806cc6a31d034ea0b914233c821b2d9f4 100644 (file)
@@ -658,18 +658,24 @@ recv_again:
                                 rv = ap_pass_brigade(r->output_filters, ob);
                                 if (rv != APR_SUCCESS) {
                                     *err = "passing headers brigade to output filters";
+                                    break;
                                 }
                                 else if (status == HTTP_NOT_MODIFIED) {
                                     /* The 304 response MUST NOT contain
-                                     * a message-body, ignore it. */
+                                     * a message-body, ignore it.
+                                     * The break is not added since there might
+                                     * be more bytes to read from the FCGI
+                                     * connection. Even if the message-body is
+                                     * ignored we want to avoid subsequent
+                                     * bogus reads. */
                                     ignore_body = 1;
                                 }
                                 else {
                                     ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(01070)
                                                     "Error parsing script headers");
                                     rv = APR_EINVAL;
+                                    break;
                                 }
-                                break;
                             }
 
                             if (conf->error_override &&