-*- coding: utf-8 -*-
Changes with Apache 2.5.1
+ *) mod_proxy_http: Fix 100-continue deadlock for spooled request bodies,
+ leading to Request Timeout (408). PR 63855. [Yann Ylavic]
+
*) mod_md: Adding the several new features.
The module offers an implementation of OCSP Stapling that can replace fully or
for a limited set of domains the existing one from mod_ssl. OCSP handling
apr_file_t *tmpfile = NULL;
apr_off_t limit;
+ /* Send "100 Continue" now if the client expects one, before
+ * blocking on the body, otherwise we'd wait for each other.
+ */
+ if (req->expecting_100) {
+ int saved_status = r->status;
+
+ r->expecting_100 = 1;
+ r->status = HTTP_CONTINUE;
+ ap_send_interim_response(r, 0);
+ AP_DEBUG_ASSERT(!r->expecting_100);
+
+ r->status = saved_status;
+ req->expecting_100 = 0;
+ }
+
body_brigade = apr_brigade_create(p, bucket_alloc);
*bytes_spooled = 0;
AP_DECLARE(void) ap_send_interim_response(request_rec *r, int send_headers)
{
hdr_ptr x;
- char *status_line = NULL;
+ char *response_line = NULL;
+ const char *status_line;
request_rec *rr;
if (r->proto_num < HTTP_VERSION(1,1)) {
}
}
- status_line = apr_pstrcat(r->pool, AP_SERVER_PROTOCOL " ", r->status_line, CRLF, NULL);
- ap_xlate_proto_to_ascii(status_line, strlen(status_line));
+ status_line = r->status_line;
+ if (status_line == NULL) {
+ status_line = ap_get_status_line_ex(r->pool, r->status);
+ }
+ response_line = apr_pstrcat(r->pool,
+ AP_SERVER_PROTOCOL " ", status_line, CRLF,
+ NULL);
+ ap_xlate_proto_to_ascii(response_line, strlen(response_line));
x.f = r->connection->output_filters;
x.bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
- ap_fputs(x.f, x.bb, status_line);
+ ap_fputs(x.f, x.bb, response_line);
if (send_headers) {
apr_table_do(send_header, &x, r->headers_out, NULL);
apr_table_clear(r->headers_out);