We must zap the Content-length header (if any). Otherwise, the
browser will be seriously confused :) The header is zapped in
ap_set_keepalive() right before we look for Content-length, transfer
encoding, HTTP level, etc. to decide, among other issues, whether or
not to turn on chunked encoding. For HTTP 1.1, if we don't send
Content-length, we need to use chunked encoding, so we have to zap
the header before that decision.
Interestingly, in Russian Apache the Content-length header is
zapped after ap_set_keepalive() is called, so with HTTP 1.1 they
break the content-length-or-chunked rule.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@85379
13f79535-47bb-0310-9956-
ffa450edef68
struct ap_rr_xlate {
/* contents are experimental! expect it to change! */
ap_xlate_t *to_net;
+ int to_net_sb; /* whether or not write translation is single-byte-only */
ap_xlate_t *from_net;
};
#endif /*APACHE_XLATE*/
ap_table_get(r->headers_out, "Connection"), "close");
const char *conn = ap_table_get(r->headers_in, "Connection");
+#ifdef APACHE_XLATE
+ if (r->rrx->to_net && !r->rrx->to_net_sb) {
+ /* Translation is not single-byte-only, so we don't know the
+ * content length. Zap the Content-Length header before the
+ * following logic, as the absence of the Content-Length header
+ * may affect the decision on chunked encoding.
+ */
+ ap_table_unset(r->headers_out,"Content-Length");
+ }
+#endif /* APACHE_XLATE */
+
/* The following convoluted conditional determines whether or not
* the current connection should remain persistent after this response
* (a.k.a. HTTP Keep-Alive) and whether or not the output message
if (output) {
r->rrx->to_net = xlate;
+ if (xlate) {
+ ap_xlate_get_sb(r->rrx->to_net, &r->rrx->to_net_sb);
+ }
rv = ap_bsetopt(r->connection->client, BO_WXLATE, &xlate);
}
else {