Pedro Melo Cunha wrote:
> Hi,
>
> a bit of history: I read on the documentation the new mod_proxy feature
> called ProxyIOBufferSize which allows for even better handling of lasrge
> mod_perl httpd's. This babby, and another little patch that also made it
> (closing the backend connection as soon as possible) allows for me to
> have a split of 100 modproxy process for only 10 backend mod_perl
> process... neat! :) (BTW, using this and mod_gzip, and you can save a
> bundle instead of buying those nice redline boxes :)
>
> the problem is that it's only available on 1.3.24 (at the time, 2 or 3
> days ago, it wasnt available yet), so I used the CVS version.
>
> Looking at the change log, they mention a bug that multiple set-cookie's
> will fail (only the last one will be sent to the client, the proxy will
> "eat" the others). And it was true... The problem is that 1.3.24 final
> also has that bug: only the last set-cookie will reach your browser.
>
> This was a show-stopper for my application. So I sat down, read the
> proxy code, and made a patch to solve the bug. I then sent the patch to
> the apache bug database (i really hate gnats ;), but they drop it (as a
> duplicate). I admit i could not attach my patch to the existing bug
> report on this subject (I said I hated gnat's :). So my patch did not
> made it the 1.3.24...
Pedro, please send it to dev @ httpd.apache.org.
> Anyway, I attached here. Maybe someone here can push it into apache for
> the next release, and in the meantime you can use it, if you want.
>
> I also attach a cgi that set's two cookies, to demonstrate the problem.
>
> Best regards,
>
> PS: mod_perl totally rocks... serving well over 70.000.000 pageviews
> with mason...
>
>
> ------------------------------------------------------------------------
>
> Index: proxy_http.c
> ===================================================================
> RCS file: /home/cvspublic/apache-1.3/src/modules/proxy/proxy_http.c,v
> retrieving revision 1.88
> diff -u -r1.88 proxy_http.c
> --- proxy_http.c 21 Mar 2002 11:38:03 -0000 1.88
> +++ proxy_http.c 22 Mar 2002 01:21:39 -0000
> @@ -136,6 +136,20 @@
> return url;
> }
>
> +
> +/* copies header key/value into table p if it's a cookie header.
> + * this is a callback function for a ap_table_do below.
> + */
> +int ap_proxy_copy_cookie_headers(void *p, const char *key, const char *value)
> +{
> + table *d = (table *)p;
> +
> + if (!strcasecmp(key, "Set-Cookie") || !strcasecmp(key, "Set-Cookie2"))
> + ap_table_add(d, key, value);
> +
> + return 1;
> +}
> +
> /*
> * This handles http:// URLs, and other URLs using a remote proxy over http
> * If proxyhost is NULL, then contact the server directly, otherwise
> @@ -529,8 +543,20 @@
> ap_proxy_write_headers(c, ap_pstrcat(p, "HTTP/1.1 ", r->status_line, NULL),
>resp_hdrs);
> }
>
> - /* Setup the headers for our client from upstreams response-headers */
> + /* Setup the headers for our client from upstreams response-headers.
> + * We use resp_hdrs to keep all the Set-Cookie and Set-Cookie2 headers,
> + * and then call ap_overlap_table, because it keep's only the last one.
> + * The we copy all the cookies back.
> + */
> + ap_table_do(ap_proxy_copy_cookie_headers, resp_hdrs, r->headers_out, NULL);
> +
> ap_overlap_tables(r->headers_out, resp_hdrs, AP_OVERLAP_TABLES_SET);
> +
> + ap_table_unset(r->headers_out, "Set-Cookie");
> + ap_table_unset(r->headers_out, "Set-Cookie2");
> +
> + ap_table_do(ap_proxy_copy_cookie_headers, r->headers_out, resp_hdrs, NULL);
> +
> /* Add X-Cache header - be careful not to obliterate any upstream headers */
> ap_table_mergen(r->headers_out, "X-Cache",
> ap_pstrcat(r->pool, "MISS from ",
>
>
> ------------------------------------------------------------------------
>
> #!/usr/local/bin/perl -w
>
> use CGI qw( :standard );
> use CGI::Cookie;
>
> my $c1 = new CGI::Cookie(-name=>'ID',-value=>123456);
> my $c2 = new CGI::Cookie(-name=>'preferences',
> -value=>{ font => Helvetica, size => 12 });
>
> print header(-cookie=>[$c1,$c2]);
>
> print "Done";
--
__________________________________________________________________
Stas Bekman JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide ---> http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org http://ticketmaster.com