summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Covener <covener@apache.org>2016-12-22 14:52:24 +0000
committerEric Covener <covener@apache.org>2016-12-22 14:52:24 +0000
commit20a29242f9204c16887db64e324615a52803f10b (patch)
tree57b26bf0dc479ae4af54969b8cee34345ee2c0a7
parenta8bb90548ae38a5df993d52a50d664a653521f03 (diff)
downloadhttpd-20a29242f9204c16887db64e324615a52803f10b.tar.gz
Merge r1773346 from trunk:
Drop C-L header and message-body from HTTP 204 responses. The C-L header can be set in a fcgi/cgi backend or in other filters like ap_content_length_filter (with the value of 0), meanwhile the message-body can be returned incorrectly by any backend. The idea is to remove unnecessary bytes from a HTTP 204 response. PR 51350 Note: merged to avoid manual conflicts, became a depedendency of the HTTP strict in trunk. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x-merge-http-strict@1775668 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--CHANGES2
-rw-r--r--modules/http/http_filters.c8
2 files changed, 8 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index 5b68b08387..c9335e006a 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,8 @@
-*- coding: utf-8 -*-
Changes with Apache 2.4.24
+ *) core: Drop Content-Length header and message-body from HTTP 204 responses.
+ PR 51350 [Luca Toscano]
*) Enforce http request grammer corresponding to RFC7230 for request lines
and request headers [William Rowe, Stefan Fritsch]
diff --git a/modules/http/http_filters.c b/modules/http/http_filters.c
index 3fefdd3b9e..027382b91c 100644
--- a/modules/http/http_filters.c
+++ b/modules/http/http_filters.c
@@ -1253,7 +1253,7 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f,
AP_DEBUG_ASSERT(!r->main);
- if (r->header_only) {
+ if (r->header_only || r->status == HTTP_NO_CONTENT) {
if (!ctx) {
ctx = f->ctx = apr_pcalloc(r->pool, sizeof(header_filter_ctx));
}
@@ -1344,6 +1344,10 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f,
apr_table_unset(r->headers_out, "Content-Length");
}
+ if (r->status == HTTP_NO_CONTENT) {
+ 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);
@@ -1433,7 +1437,7 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f,
ap_pass_brigade(f->next, b2);
- if (r->header_only) {
+ if (r->header_only || r->status == HTTP_NO_CONTENT) {
apr_brigade_cleanup(b);
ctx->headers_sent = 1;
return OK;