--- a/modules/proxy/mod_proxy_fcgi.c 2015/01/09 21:25:26 1650676 +++ b/modules/proxy/mod_proxy_fcgi.c 2015/01/09 21:33:12 1650677 @@ -367,7 +367,7 @@ request_rec *r, int request_id) { 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 @@ 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 @@ r->status = HTTP_OK; } - 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) { break; @@ -626,7 +633,7 @@ * 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) { break;