]> granicus.if.org Git - apache/commitdiff
Merge r1640495, r1644031 from trunk
authorChristophe Jaillet <jailletc36@apache.org>
Fri, 9 Jan 2015 21:33:12 +0000 (21:33 +0000)
committerChristophe Jaillet <jailletc36@apache.org>
Fri, 9 Jan 2015 21:33:12 +0000 (21:33 +0000)
   * mod_proxy_fcgi: Ignore body data from backend for 304 responses. PR 57198.

Submitted by: jkaluza
Reviewed by: jkaluza, ylavic, covener
Backported by: jailletc36

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1650677 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
STATUS
modules/proxy/mod_proxy_fcgi.c

diff --git a/CHANGES b/CHANGES
index 689a888378579f7f312eac60520da2ffb827286a..68561085275a2ce70c57ab937f8fa406dae542f8 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -22,6 +22,9 @@ Changes with Apache 2.4.11
      request headers earlier.  Adds "MergeTrailers" directive to restore
      legacy behavior.  [Edward Lu, Yann Ylavic, Joe Orton, Eric Covener]
 
+  *) mod_proxy_fcgi: Ignore body data from backend for 304 responses. PR 57198.
+     [Jan Kaluza]
+
   *) mod_ssl: Do not crash when looking up SSL related variables during
      expression evaluation on non SSL connections. PR 57070  [Ruediger Pluem]
 
diff --git a/STATUS b/STATUS
index 1cc90422030cf96d5e04f64cc4289cdd4ff079c2..04070ab98b171be77cb99e719423364a98b617bd 100644 (file)
--- a/STATUS
+++ b/STATUS
@@ -104,12 +104,6 @@ RELEASE SHOWSTOPPERS:
 PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
   [ start all new proposals below, under PATCHES PROPOSED. ]
 
-   * mod_proxy_fcgi: Ignore body data from backend for 304 responses. PR 57198.
-     trunk patch: http://svn.apache.org/r1640495
-                  http://svn.apache.org/r1644031
-     2.4.x patch: trunk works
-     +1 jkaluza, ylavic, covener
-
    * mod_cgi: Log CGI script stderr to ScriptLog, use APLOGNO for
      log_scripterror errors.
      trunk patch: http://svn.apache.org/r1626978
index ac8e9206675062146736a984653a0be0c5c40746..a261b6762aa89fd40225c17c7034b4793130bbde 100644 (file)
@@ -367,7 +367,7 @@ static apr_status_t dispatch(proxy_conn_rec *conn, proxy_dir_conf *conf,
                              const char **err)
 {
     apr_bucket_brigade *ib, *ob;
-    int seen_end_of_headers = 0, done = 0;
+    int seen_end_of_headers = 0, done = 0, ignore_body = 0;
     apr_status_t rv = APR_SUCCESS;
     int script_error_status = HTTP_OK;
     conn_rec *c = r->connection;
@@ -577,9 +577,16 @@ recv_again:
                                 APR_BRIGADE_INSERT_TAIL(ob, tmp_b);
                                 r->status = status;
                                 ap_pass_brigade(r->output_filters, ob);
-                                ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(01070)
-                                              "Error parsing script headers");
-                                rv = APR_EINVAL;
+                                if (status == HTTP_NOT_MODIFIED) {
+                                    /* The 304 response MUST NOT contain
+                                     * a message-body, ignore it. */
+                                    ignore_body = 1;
+                                }
+                                else {
+                                    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(01070)
+                                                    "Error parsing script headers");
+                                    rv = APR_EINVAL;
+                                }
                                 break;
                             }
 
@@ -598,7 +605,7 @@ recv_again:
                             }
 
                             if (script_error_status == HTTP_OK
-                                && !APR_BRIGADE_EMPTY(ob)) {
+                                && !APR_BRIGADE_EMPTY(ob) && !ignore_body) {
                                 /* Send the part of the body that we read while
                                  * reading the headers.
                                  */
@@ -626,7 +633,7 @@ recv_again:
                          * but that could be a huge amount of data; so we pass
                          * along smaller chunks
                          */
-                        if (script_error_status == HTTP_OK) {
+                        if (script_error_status == HTTP_OK && !ignore_body) {
                             rv = ap_pass_brigade(r->output_filters, ob);
                             if (rv != APR_SUCCESS) {
                                 *err = "passing brigade to output filters";