Commit aa9d7c93 authored by Ralf S. Engelschall's avatar Ralf S. Engelschall
Browse files

"force-response-1.0" now only applies to requests which are HTTP/1.0 to begin

with.  "nokeepalive" now works for HTTP/1.1 clients.  Added "downgrade-1.0"
which causes Apache to pretend it received a 1.0.  Additionally mod_browser
now triggers during translate_name to workaround a deficiency in the
header_parse phase.

PR:	875
Submitted by:	Dean Gaudet
Reviewed by:	Roy Fielding, Ralf S. Engelschall, Jim Jagielski


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/1.3@78826 13f79535-47bb-0310-9956-ffa450edef68
parent ca5dafce
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
Changes with Apache 1.2.2

  *) "force-response-1.0" now only applies to requests which are HTTP/1.0 to
     begin with.  "nokeepalive" now works for HTTP/1.1 clients.  Added
     "downgrade-1.0" which causes Apache to pretend it received a 1.0.
     Additionally mod_browser now triggers during translate_name to workaround
     a deficiency in the header_parse phase.
     [Dean Gaudet] PR#875

  *) get_client_block() returns wrong length if policy is 
     REQUEST_CHUNKED_DECHUNK.
     [Kenichi Hori <ken@d2.bs1.fc.nec.co.jp>] PR#815
+9 −6
Original line number Diff line number Diff line
@@ -281,8 +281,9 @@ int set_keepalive(request_rec *r)
     *   and the response status does not require a close;
     *   and the response generator has not already indicated close;
     *   and the client did not request non-persistence (Connection: close);
     *   and    we haven't been configured to ignore the buggy twit
     *       or they're a buggy twit coming through a HTTP/1.1 proxy
     *   and    the client is requesting an HTTP/1.0-style keep-alive
     *          and we haven't been configured to ignore the buggy twit,
     *       or the client claims to be HTTP/1.1 compliant (perhaps a proxy);
     *   THEN we can be persistent, which requires more headers be output.
     *
@@ -304,8 +305,9 @@ int set_keepalive(request_rec *r)
        !status_drops_connection(r->status) &&
        !wimpy &&
        !find_token(r->pool, conn, "close") &&
        (((ka_sent = find_token(r->pool, conn, "keep-alive")) &&
          !table_get(r->subprocess_env, "nokeepalive")) ||
	(!table_get(r->subprocess_env, "nokeepalive") ||
	 table_get(r->headers_in, "Via")) &&
	((ka_sent = find_token(r->pool, conn, "keep-alive")) ||
	   (r->proto_num >= 1001))
       ) {
	char header[256];
@@ -1042,7 +1044,8 @@ void basic_http_header (request_rec *r)
    if (!r->status_line)
        r->status_line = status_lines[index_of_response(r->status)];

    if (table_get(r->subprocess_env,"force-response-1.0"))
    if (r->proto_num == 1000
	&& table_get(r->subprocess_env,"force-response-1.0"))
	protocol = "HTTP/1.0";
    else
	protocol = SERVER_PROTOCOL;
+4 −0
Original line number Diff line number Diff line
@@ -937,6 +937,10 @@ void process_request_internal (request_rec *r)
	return;
    }

    if (r->proto_num > 1000 && table_get (r->subprocess_env, "downgrade-1.0")) {
	r->proto_num = 1000;
    }

    /* NB: directory_walk() clears the per_dir_config, so we don't inherit from
       location_walk() above */

+4 −4
Original line number Diff line number Diff line
@@ -139,7 +139,7 @@ command_rec browser_module_cmds[] = {
{ NULL },
};

int parse_headers_browser_module(request_rec *r)
static int browser_match(request_rec *r)
{
    server_rec *s = r->server;
    browser_server_config_rec *sconf = get_module_config (s->module_config,
@@ -166,7 +166,7 @@ int parse_headers_browser_module(request_rec *r)
	}
    }

    return OK;  
    return DECLINED;  
}

module browser_module = {
@@ -178,12 +178,12 @@ module browser_module = {
   merge_browser_config,     	/* merge server configs */
   browser_module_cmds,		/* command table */
   NULL,			/* handlers */
   NULL,			/* filename translation */
   browser_match,		/* filename translation */
   NULL,			/* check_user_id */
   NULL,			/* check auth */
   NULL,			/* check access */
   NULL,			/* type_checker */
   NULL,			/* fixups */
   NULL,			/* logger */
   parse_headers_browser_module	/* header parser */
   NULL				/* header parser */
};