On 11 Oct 1999, Andreas J. Koenig wrote:

> Date: 11 Oct 1999 12:48:54 +0200
> From: "Andreas J. Koenig" <[EMAIL PROTECTED]>
> To: Oleg Bartunov <[EMAIL PROTECTED]>
> Cc: [EMAIL PROTECTED], [EMAIL PROTECTED]
> Subject: Re: http headers for cache-friendly modperl site
> 
> >>>>> On Mon, 11 Oct 1999 13:18:12 +0400 (MSD), Oleg Bartunov <[EMAIL PROTECTED]> said:
> 
>  > 1. Do you have some examples on-line to illustrate
>  >    cache-friendly dynamical pages ?
> 
> On www.stadtplandienst.de the headers for the graphics have optimal
> headers, I think. The headers for HTML could be improved though.
> 
> On the other machines where I have prepared everything to be
> cache-friendly, I yet have to decide about a good expiration schedule.
> And as often, without a pressing need, I haven't yet come around to
> finetune it.

Thanks for references. I could recommend also mailing list archive
http://www.progressive-comp.com/Lists/ which is cache-friendly
with dynamic content site. Also is very useful.


> 
>  > 2. I'm building server with fully dynamic content using
>  >    Apache, modperl and HTML::Mason and would like to implement
>  >    cache-friendly strategy you described. But I have some problem:
>  >    In Russia we have several encodings for russian language
>  >    ( koi8-r - mostly Unix, win-1251 - mostly windows and several
>  >    others). Documents generated in native server's encoding and
>  >    translated to another encoding on-fly depending on several
>  >    parameters (user directly specify port number for example or
>  >    server understand on some logic (by User Agent string for example) what 
>  >    encoding would be the best for user). If user directly selected
>  >    port number URL would changed, say http://some.host:8100/ for koi8-r
>  >    and http://some.host:8101/ for win-1251. In such situation there
>  >    are no problem with caching on proxy servers because URL's are different.
>  >    But in case when server automagically recognize encoding of client
>  >    URL stays the same for differnet encodings - just http://some.host/
>  >    and this cause a trouble with proxy. Suppose if user1 from windows machine
>  >    and user2 from Unix request the same document using the same proxy.
> 
> This is exactly the same problem for any content negotiation. If you
> are using content negotiation, you *must* specify the Vary header as
> described in my document. But as soon as you have a Vary header, you
> are out of luck with regard to caching proxies because squid is unable
> to cache documents with a Vary header (it just expires them
> immediately) and I believe there is no other Proxy available that does
> handle Vary headers intelligenty. So although you are acting
> cache-friendly and correct, the current available cache technology
> isn't up to the task.
> 
> But as a workaround you can and should work with a redirect.
> 
> 1. Decide about a parameter in the querystring or in the pathinfo or
>    in the path that codifies everything you would normally handle by
>    interpreting an incoming header, like Accept, Accept-Encoding,
>    Accept-Charset, User-Agent, etc.
> 
> 2. As one of the first things your program should check for the
>    precense of this parameter in the requested URI.
> 
> 3. If it is there, you have a unique URI and can answer in a
>    cache-friendly way. If it isn't there, you code it into the
>    received URI and answer with a redirect to the URI you just
>    constructed.

Yes,

I already found workaround to generate unique URL (using different port number)
and it works quite fine. There were some problems in 2 servers setup
(it's easy to get redirection loop) but I found a right way.

        Thanks for help,

                Oleg

> 
> An example: www.meta-list.net, where we roughly do the following,
> where $mgr is an Apache::HeavyCGI object we created earlier and $cgi
> is an Apache::Request object.
> 
>   my $acc = $cgi->param('acc');
> 
>   if  (defined($acc)) {
>     my $lang;
>     ($mgr->{CAN_UTF8},$mgr->{CAN_GZIP},$mgr->{CAN_PNG},$mgr->{Lang}) =
>         unpack "a a a a*", $acc;
>   } else {
>     my $utf8  = $mgr->can_utf8;
>     my $gzip  = $mgr->can_gzip;
>     my $png   = $mgr->can_png;
>     my $lang  = $r->header_in("Accept-Language");
>     my $param = $utf8 . $gzip . $png . $mgr->uri_escape($lang);
>     my $redir_to;
>     if ($r->method_number == M_GET) {
>       my $args = $r->args;
>       $redir_to = $mgr->myurl . "?acc=$param";
>       $redir_to .= "&$args" if $args;
>     } elsif ($r->method_number == M_POST) {
>       warn "We got a POST but we are only prepared for GET!";
>       return;
>     }
>     $r->header_out("Location",$redir_to);
>     require Apache::Constants;
>     my $stat = Apache::Constants::REDIRECT();
>     $r->status($stat);
>     $r->send_http_header;
>   }
> 
> This code doesn't work exactly as posted because I simplified a few
> things to illustrate the point, but I hope it helps clarify things.
> 
> -- 
> andreas
> 

_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: [EMAIL PROTECTED], http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83

Reply via email to