Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2003-09-15 Thread Jeff Trawick
[EMAIL PROTECTED] wrote:

rederpj 2003/09/12 12:28:47

  Modified:.CHANGES
   modules/experimental mod_cache.c
  Log:
   This fixes the cache code so that responses can be cached if they have
   an Expires header but no Etag or Last-Modified headers. PR 23130.
   Submitted by: <[EMAIL PROTECTED]>
   Reviewed by: Paul J. Reder

  Index: CHANGES
  ===
  RCS file: /home/cvs/httpd-2.0/CHANGES,v
  retrieving revision 1.1271
  retrieving revision 1.1272
  diff -u -r1.1271 -r1.1272
  --- CHANGES	11 Sep 2003 18:24:25 -	1.1271
  +++ CHANGES	12 Sep 2003 19:28:46 -	1.1272
  @@ -2,6 +2,12 @@
   
 [Remove entries to the current 2.0 section below, when backported]
   
  +  *) This fixes the cache code so that responses can be cached
  + if they have an Expires header but no Etag or Last-Modified
  + headers. PR 23130.
  + [Submitted by: <[EMAIL PROTECTED]>]
  + [Reviewed by: Paul J. Reder]
This should be

*) This fixes the cache code so that responses can be cached
   if they have an Expires header but no Etag or Last-Modified
   headers. PR 23130.  [<[EMAIL PROTECTED]>]
unless you had to modify the code, in which case your name goes inside 
[] along with the other person's info with no distinguishing between the 
submitter and the reviewer.  Also, it is nice to see a real name when known.



Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2002-12-17 Thread Cliff Woolley
On Tue, 17 Dec 2002, Greg Marr wrote:

> Any reason not to just use apr_pstrcat(p, "Broken expires header ",
> exps) and save the overhead of the psprintf?

None that I know of.  It's not the main-line case, so it's not the most
critical thing in the world performance-wise, but I suppose it couldn't
hurt.  Anyway, wouldn't it be:

apr_pstrcat(p, "Broken expires header ", exps, NULL);

I was pretty sure you need the NULL there for pstrcat.

--Cliff





Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2002-12-17 Thread Greg Marr
At 02:23 PM 12/17/2002, Paul J. Reder wrote:

Yup, the coredump happened in the first call with the %d. I just 
patched this second call without looking at the exp parm, then 
failed to notice the warning... *sigh* must be near Christmas 
vacation when it takes three passes to get something like this 
right... ;)

Any reason not to just use apr_pstrcat(p, "Broken expires header ", 
exps) and save the overhead of the psprintf?

Cliff Woolley wrote:


On Tue, 17 Dec 2002, Joe Orton wrote:


On Tue, Dec 17, 2002 at 05:10:05PM -, Bill Stoddard wrote:


  else if (exps != NULL && exp == APR_DATE_BAD) {
  /* if a broken Expires header is present, don't 
cache it */
 -reason = apr_pstrcat(p, "Broken expires header 
%s", exp);
 +reason = apr_psprintf(p, "Broken expires header 
%s", exp);
Still not right - 'exp' is an apr_time_t, you mean 'exps' I guess?

mod_cache.c: In function `cache_in_filter':
mod_cache.c:543: warning: format argument is not a pointer (arg 3)


Oooh, yowtch... good call.  I wasn't even looking at that part.


--
Greg Marr
[EMAIL PROTECTED]




Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2002-12-17 Thread Paul J. Reder
Yup, the coredump happened in the first call with the %d. I just
patched this second call without looking at the exp parm, then failed
to notice the warning... *sigh* must be near Christmas vacation
when it takes three passes to get something like this right... ;)

Cliff Woolley wrote:


On Tue, 17 Dec 2002, Joe Orton wrote:



On Tue, Dec 17, 2002 at 05:10:05PM -, Bill Stoddard wrote:


  else if (exps != NULL && exp == APR_DATE_BAD) {
  /* if a broken Expires header is present, don't cache it */
 -reason = apr_pstrcat(p, "Broken expires header %s", exp);
 +reason = apr_psprintf(p, "Broken expires header %s", exp);


Still not right - 'exp' is an apr_time_t, you mean 'exps' I guess?

mod_cache.c: In function `cache_in_filter':
mod_cache.c:543: warning: format argument is not a pointer (arg 3)




Oooh, yowtch... good call.  I wasn't even looking at that part.

--Cliff





--
Paul J. Reder
---
"The strength of the Constitution lies entirely in the determination of each
citizen to defend it.  Only if every single citizen feels duty bound to do
his share in this defense are the constitutional rights secure."
-- Albert Einstein





RE: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2002-12-17 Thread Bill Stoddard
Thanks! Fixing in 2.0 and 2.1...

Bill
> 
> On Tue, Dec 17, 2002 at 05:10:05PM -, Bill Stoddard wrote:
> >   Fix PR 15113, a core dump in cache_in_filter when
> >   a redirect occurs. The code was passing a format string and
> >   integer to apr_pstrcat. Changed to apr_psprintf. [Paul J. Reder]
> >   
> >   PR: 15113
> ...
> >else if (exps != NULL && exp == APR_DATE_BAD) {
> >/* if a broken Expires header is present, don't cache it */
> >   -reason = apr_pstrcat(p, "Broken expires header %s", exp);
> >   +reason = apr_psprintf(p, "Broken expires header %s", exp);
> 
> Still not right - 'exp' is an apr_time_t, you mean 'exps' I guess?
> 
> mod_cache.c: In function `cache_in_filter':
> mod_cache.c:543: warning: format argument is not a pointer (arg 3)



Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2002-12-17 Thread Cliff Woolley
On Tue, 17 Dec 2002, Joe Orton wrote:

> On Tue, Dec 17, 2002 at 05:10:05PM -, Bill Stoddard wrote:
> >else if (exps != NULL && exp == APR_DATE_BAD) {
> >/* if a broken Expires header is present, don't cache it */
> >   -reason = apr_pstrcat(p, "Broken expires header %s", exp);
> >   +reason = apr_psprintf(p, "Broken expires header %s", exp);
>
> Still not right - 'exp' is an apr_time_t, you mean 'exps' I guess?
>
> mod_cache.c: In function `cache_in_filter':
> mod_cache.c:543: warning: format argument is not a pointer (arg 3)


Oooh, yowtch... good call.  I wasn't even looking at that part.

--Cliff




Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2002-12-17 Thread Joe Orton
On Tue, Dec 17, 2002 at 05:10:05PM -, Bill Stoddard wrote:
>   Fix PR 15113, a core dump in cache_in_filter when
>   a redirect occurs. The code was passing a format string and
>   integer to apr_pstrcat. Changed to apr_psprintf. [Paul J. Reder]
>   
>   PR: 15113
...
>else if (exps != NULL && exp == APR_DATE_BAD) {
>/* if a broken Expires header is present, don't cache it */
>   -reason = apr_pstrcat(p, "Broken expires header %s", exp);
>   +reason = apr_psprintf(p, "Broken expires header %s", exp);

Still not right - 'exp' is an apr_time_t, you mean 'exps' I guess?

mod_cache.c: In function `cache_in_filter':
mod_cache.c:543: warning: format argument is not a pointer (arg 3)




RE: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2002-12-17 Thread Bill Stoddard
Nice catch Paul.

Bill

> rederpj 2002/12/17 07:29:02
> 
>   Modified:.CHANGES
>modules/experimental mod_cache.c
>   Log:
>   mod_cache: Fix PR 15113, a core dump in cache_in_filter when
>   a redirect occurs. The code was passing a format string and
>   integer to apr_pstrcat. Changed to apr_psprintf. [Paul J. Reder]
>   
>   Revision  ChangesPath
>   1.1012+5 -0  httpd-2.0/CHANGES
>   
>   Index: CHANGES
>   ===
>   RCS file: /home/cvs/httpd-2.0/CHANGES,v
>   retrieving revision 1.1011
>   retrieving revision 1.1012
>   diff -u -r1.1011 -r1.1012
>   --- CHANGES 15 Dec 2002 16:37:18 -  1.1011
>   +++ CHANGES 17 Dec 2002 15:29:01 -  1.1012
>   @@ -2,6 +2,11 @@
>
>  [Remove entries to the current 2.0 section below, when backported]
>
>   +  *) mod_cache: Fix PR 15113, a core dump in cache_in_filter when
>   + a redirect occurs. The code was passing a format string and
>   + integer to apr_pstrcat. Changed to apr_psprintf.
>   + [Paul J. Reder]
>   +
>  *) mod_mime: Workaround to prevent a segfault if r->filename=NULL
> [Brian Pane]
> 
>   
>   
>   
>   1.70  +2 -2  httpd-2.0/modules/experimental/mod_cache.c
>   
>   Index: mod_cache.c
>   ===
>   RCS file: /home/cvs/httpd-2.0/modules/experimental/mod_cache.c,v
>   retrieving revision 1.69
>   retrieving revision 1.70
>   diff -u -r1.69 -r1.70
>   --- mod_cache.c 11 Dec 2002 22:31:28 -  1.69
>   +++ mod_cache.c 17 Dec 2002 15:29:02 -  1.70
>   @@ -532,11 +532,11 @@
> * We include 304 Not Modified here too as this is the 
> origin server
> * telling us to serve the cached copy.
> */
>   -  reason = apr_pstrcat(p, "Response status %d", r->status);
>   +  reason = apr_psprintf(p, "Response status %d", r->status);
>} 
>else if (exps != NULL && exp == APR_DATE_BAD) {
>/* if a broken Expires header is present, don't cache it */
>   -reason = apr_pstrcat(p, "Broken expires header %s", exp);
>   +reason = apr_psprintf(p, "Broken expires header %s", exp);
>}
>else if (r->args && exps == NULL) {
>/* if query string present but no expiration time, 
> don't cache it
>   
>   
>   



Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2002-01-30 Thread Ian Holsman

Jeff Trawick wrote:
> [EMAIL PROTECTED] writes:
> 
> 
>>ianh02/01/30 10:05:26
>>
>>  Modified:modules/experimental mod_cache.c
>>  Log:
>>  out damn warnings out
>>  
>>  Index: mod_cache.c
>>  ===
>>  RCS file: /home/cvs/httpd-2.0/modules/experimental/mod_cache.c,v
>>  retrieving revision 1.19
>>  retrieving revision 1.20
>>  diff -u -r1.19 -r1.20
>>  --- mod_cache.c 25 Jan 2002 20:09:33 -  1.19
>>  +++ mod_cache.c 30 Jan 2002 18:05:26 -  1.20
>>  @@ -63,6 +63,10 @@
>>   module AP_MODULE_DECLARE_DATA cache_module;
>>   
>>   
>>  +int ap_url_cache_handler(request_rec *r);
>>  +int ap_cache_out_filter(ap_filter_t *f, apr_bucket_brigade *bb);
>>  +int ap_cache_conditional_filter(ap_filter_t *f, apr_bucket_brigade *in);
>>  +int ap_cache_in_filter(ap_filter_t *f, apr_bucket_brigade *in);
>>
> 
> I started to work on the warnings too, but I don't know what the real
> fix is.  It seems to me that exactly one of the following has to be done:
> 
> 1) make them static (and for extra credit drop the "ap_" prefix)
> 2) put the declarations in a header file
> 
> 

yep..
your right.. these should be static.
fix it in a second.




Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2002-01-30 Thread Jeff Trawick

[EMAIL PROTECTED] writes:

> ianh02/01/30 10:05:26
> 
>   Modified:modules/experimental mod_cache.c
>   Log:
>   out damn warnings out
>   
>   Index: mod_cache.c
>   ===
>   RCS file: /home/cvs/httpd-2.0/modules/experimental/mod_cache.c,v
>   retrieving revision 1.19
>   retrieving revision 1.20
>   diff -u -r1.19 -r1.20
>   --- mod_cache.c 25 Jan 2002 20:09:33 -  1.19
>   +++ mod_cache.c 30 Jan 2002 18:05:26 -  1.20
>   @@ -63,6 +63,10 @@
>module AP_MODULE_DECLARE_DATA cache_module;
>
>
>   +int ap_url_cache_handler(request_rec *r);
>   +int ap_cache_out_filter(ap_filter_t *f, apr_bucket_brigade *bb);
>   +int ap_cache_conditional_filter(ap_filter_t *f, apr_bucket_brigade *in);
>   +int ap_cache_in_filter(ap_filter_t *f, apr_bucket_brigade *in);

I started to work on the warnings too, but I don't know what the real
fix is.  It seems to me that exactly one of the following has to be done:

1) make them static (and for extra credit drop the "ap_" prefix)
2) put the declarations in a header file

-- 
Jeff Trawick | [EMAIL PROTECTED] | PGP public key at web site:
   http://www.geocities.com/SiliconValley/Park/9289/
 Born in Roswell... married an alien...



Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-04 Thread Bill Stoddard

>
> just to add my 2c to the picture.
> I dont see why the cache-filter could not live anywhere in the filter chain
> it could sit just after the handler (where it could cache a report generator)
> which would then feed into php/include
>
> it could sit after php/include and possibly after the gzip/byte ranges as well.
>
> the thing it needs to do, (which I haven't seen yet) is address how it uniquely
> identifies what is the same request.

Are you referring to the fact that a single URL may actually represent multiple views 
(and
perhaps multiple cache entries)?

I believe Graham's idea was to allow caching multiple views using the same URL. 
Searching
the cache using a URL as key would return a collection of cache objects.
cache_select_url() would negotiate across the collection to determine which object, if
any, should be served. An alternate solution would be to cache content using complex
search keys, rather than just the URL (i.e., don't return collections, only unique 
single
cache objects).

>
> It needs to be cofigurable so that it could use the
> * incoming vhost+request (simple case)
> * the user agent
> * a cookie value (or part of)
> * any part of the incoming request header.
>
>
> so.. you might have something like
> SetOutputfilter CACHE INCLUDE GZ
> CACHECRITERIA REQ, UserAgent
> or
> SetOutputFilter INCLUDE GZ CACHE
> CACHECRITERIA REQ, Cookie: Foo+8 (last 8 bytes of Foo)
>

We need a whole new class of configuration directives to control how cache search keys 
are
built.  For ESI (and other HTML tag driven caches) you would probably want to allow
dynamically constructing a rule set that contains rules for building search keys.
cache_select_url() would use the rule set as a guide for building sophisticated search
keys using cookies, request parameters, etc.  The rule set could be built at startup 
based
on config directives or at runtime based on whatever runtime criterion you choose.
Interesting stuff...

Bill




Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-04 Thread William A. Rowe, Jr.

From: "Bill Stoddard" <[EMAIL PROTECTED]>
Sent: Tuesday, September 04, 2001 10:02 AM


> > I agree with this. Our current AP_FTYPE_* classifications is not granular enough to
> > support this but that is easily fixed. Patch on the way...
> >
> 
> Err or not. Jeff convinced me that it was premature to add additional AP_FTYPES. 
>For
> now, everything FTYPE_HEADERS (cache, content encoding, charset translations, et. 
>al.)
> should be an FTYPE_CONTENT filter.

That works for me ... I'd agree, if this is what it looks like;

> > Bill
> >
> > > A transfer encoding isn't a byterange or chunking output.  It's a compression
> > > scheme, and that we _want_ to cache, to avoid the cpu overhead.
> > >
> > > Handler (e.g. Core/autoindex/mod_webapp etc)

FTYPE_CONTENT >>>

> > > Includes and other Filters
> > >  V
> > > Charset Translation (Transform to Client's preference)
> > >  V
> > > Content Encoding (gz) (Body - large packets - higher compression)

<<< END FTYPE_CONTENT

> > >  X <<< cache here
> > >  V
> > > Byterange

> > >  V

I forgot to insert about here...

  Transfer-Encoding (gz) (Really unsupported today by any clients per Kiley)
> > >  V
> > > Chunking
> > >  V
> > > Headers
> > >  V
> > > SSL Crypto
> > >  V
> > > Network I/O
> > >
> > >
> > >
> >
> 
> 




Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-04 Thread Bill Stoddard



> I agree with this. Our current AP_FTYPE_* classifications is not granular enough to
> support this but that is easily fixed. Patch on the way...
>

Err or not. Jeff convinced me that it was premature to add additional AP_FTYPES. 
For
now, everything FTYPE_HEADERS (cache, content encoding, charset translations, et. al.)
should be an FTYPE_CONTENT filter.

Bill

> Bill
>
> > A transfer encoding isn't a byterange or chunking output.  It's a compression
> > scheme, and that we _want_ to cache, to avoid the cpu overhead.
> >
> > Handler (e.g. Core/autoindex/mod_webapp etc)
> >  V
> > Includes and other Filters
> >  V
> > Charset Translation (Transform to Client's preference)
> >  V
> > Content Encoding (gz) (Body - large packets - higher compression)
> >  V
> >  X <<< cache here
> >  V
> > Byterange
> >  V
> > Chunking
> >  V
> > Headers
> >  V
> > SSL Crypto
> >  V
> > Network I/O
> >
> >
> >
>




Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-04 Thread Graham Leggett

Greg Marr wrote:

> >mod_cache and mod_include should have no knowledge of each other.
> 
> Exactly.  They shouldn't care in which order they are run, that
> should be up to the admin.  You're saying the opposite, that
> mod_cache should only be able to run after mod_include.

No - I am saying mod_cache should run after *everything*, not just
mod_include.

> This has absolutely nothing to do with using mod_cache to cache the
> page just before it is processed by mod_include, and processing the
> page retrieved from the cache using mod_include.

Look closer at mod_cache before saying this cannot be done.

mod_cache uses a user configuration to determine what URL prefixes to
cache, and which URL prefixes not to cache. If you want to cache stuff
before mod_include, then configure those included URLs to be cached, and
not the final URL. Problem solved without trying to fiddle with
mod_cache in the filter stack.

> >mod_cache only cares about what is spat out at the end of the filter
> >chain
> 
> Why should it be restricted like that?  That makes it less useful.

There are many filter chains in Apache. Each subrequest has it's own
chain, and mod_cache could be at the end of these subchains (and will be
if you configure your URLs correctly). This solves your problem.

> So why are you saying it should be done that way?  It should be able
> to be placed at any point in the filter chain.  Requiring it to come
> after mod_ is tying its behavior to mod_, saying
> that mod_ must process the   file before it is cached.

No - all mod_cache says is that it goes last in a request chain, that's
all. It neither knows about nor cares about other modules.

Regards,
Graham
-- 
-
[EMAIL PROTECTED]"There's a moon
over Bourbon Street
tonight..."
 S/MIME Cryptographic Signature


Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-04 Thread Bill Stoddard

I agree with this. Our current AP_FTYPE_* classifications is not granular enough to
support this but that is easily fixed. Patch on the way...

Bill

> A transfer encoding isn't a byterange or chunking output.  It's a compression
> scheme, and that we _want_ to cache, to avoid the cpu overhead.
>
> Handler (e.g. Core/autoindex/mod_webapp etc)
>  V
> Includes and other Filters
>  V
> Charset Translation (Transform to Client's preference)
>  V
> Content Encoding (gz) (Body - large packets - higher compression)
>  V
>  X <<< cache here
>  V
> Byterange
>  V
> Chunking
>  V
> Headers
>  V
> SSL Crypto
>  V
> Network I/O
>
>
>




Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-04 Thread Greg Marr

At 06:19 PM 09/03/2001, Graham Leggett wrote:
>Greg Marr wrote:
>
> > How exactly do you use Cache-Control directives so that the 
> content that
> > is cached is before includes are processed, and that when it is
> > retrieved from the cache, the includes are processed?  It just 
> doesn't
> > work that way.  In this case you have to put the includes before 
> the
> > cache.
>
>mod_cache and mod_include should have no knowledge of each other.

Exactly.  They shouldn't care in which order they are run, that 
should be up to the admin.  You're saying the opposite, that 
mod_cache should only be able to run after mod_include.

>mod_cache is interested in content going to the browser.

You're interested in having mod_cache only interested in content 
going to the browser.  There's a difference.

>There are already two caches in the loop (a transparent ISP cache, 
>and the browser cache) so if mod_include doesn't generate proper 
>Cache-Control: headers
>then mod_includes is broken already without any help from mod_cache.

This has absolutely nothing to do with using mod_cache to cache the 
page just before it is processed by mod_include, and processing the 
page retrieved from the cache using mod_include.

>I don't see any reason why mod_cache should interfere with 
>mod_include (or vice versa).

Apparently you do.

>mod_cache only cares about what is spat out at the end of the filter 
>chain

Why should it be restricted like that?  That makes it less useful.

>One of the fundamental design points about mod_cache was to separate 
>it from all other modules (specifically mod_proxy).  Tying mod_cache 
>behaviour to mod_include (or any other module) is a step backwards 
>in the design.

So why are you saying it should be done that way?  It should be able 
to be placed at any point in the filter chain.  Requiring it to come 
after mod_ is tying its behavior to mod_, saying 
that mod_ must process the   file before it is cached.

-- 
Greg Marr
[EMAIL PROTECTED]
"We thought you were dead."
"I was, but I'm better now." - Sheridan, "The Summoning"




Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-03 Thread Ryan Bloom

On Monday 03 September 2001 18:58, William A. Rowe, Jr. wrote:
> From: "Ryan Bloom" <[EMAIL PROTECTED]>
> Sent: Monday, September 03, 2001 8:03 PM
>
> > On Monday 03 September 2001 15:42, Rasmus Lerdorf wrote:
> > > There should be a way to specify ordering of the content handlers in
> > > the stack.
> >
> > There is.  In fact, there are TWO ways to configure this.  The first way,
> > is to do it in the config file.  If you do:
> >
> > AddOutputFilter INCLUDES PHP
>
> Did you mean this?  SetOutputFilter INCLUDES;PHP

Yeah, I didn't lookup the syntax, just went from memory.

Ryan

> At this point, I'm strongly in favor of all usual mappings
> (Add/SetOutputFilter) occuring in the mime_types phase.  When the
> insert_filters hook is invoked, your module can look at the filter stack,
> and rearrange it however you like.  Of course, others in that hook chain
> could do the same, so it makes sense to only change what you absolutely
> must.

No, allowing random modules to re-order the filter chain is just asking for
trouble, and it removes any hope of allowing the admin to order it correctly
for their site.

Ryan
__
Ryan Bloom  [EMAIL PROTECTED]
Covalent Technologies   [EMAIL PROTECTED]
--



Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-03 Thread William A. Rowe, Jr.

From: "Ryan Bloom" <[EMAIL PROTECTED]>
Sent: Monday, September 03, 2001 8:03 PM


> On Monday 03 September 2001 15:42, Rasmus Lerdorf wrote:
> > There should be a way to specify ordering of the content handlers in the
> > stack.
> 
> There is.  In fact, there are TWO ways to configure this.  The first way, is
> to do it in the config file.  If you do:
> 
> AddOutputFilter INCLUDES PHP

Did you mean this?  SetOutputFilter INCLUDES;PHP

If you used the syntax;

AddOutputFilter INCLUDES shtml
AddOutputFilter PHP php

And request foo.shtml.php - it's shtml parsed, then php parsed.

If you request foo.php.shtml - it's php parsed, then shtml parsed.

> Then mod_include will always be run before mod_php.  the second way is
> for module authors to do this.  Each module has an insert_filters phase.  By
> ordering the insert_filters phase, you can order which filter is called when.
> 
> If for some reason, the PHP developers always wanted to run before mod_include,
> then they should specify that the php insert_filters phase runs before the 
> mod_include insert_filters phase.

At this point, I'm strongly in favor of all usual mappings (Add/SetOutputFilter)
occuring in the mime_types phase.  When the insert_filters hook is invoked, your 
module can look at the filter stack, and rearrange it however you like.  Of course, 
others in that hook chain could do the same, so it makes sense to only change what 
you absolutely must.

Bill




Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-03 Thread Ryan Bloom

On Monday 03 September 2001 15:42, Rasmus Lerdorf wrote:
> > Multiple filters in the chain for each classification can exist
> > (ordering between classifications shouldn't matter...)  This
> > way you can have a URL handled by mod_include and mod_php (but
> > the mod_include portion can't create PHP tags and vice versa
> > since you can't guarantee when it will run in relation to the
> > other).
> >
> > I have no clue how this relates to our code or how others sees
> > this.  This is my quick uninformed birds-eye view.  Thoughts?
> > This ordering seems to be a problem that we need to address.
>
> Definitely.  One of the most requested features in the past has been
> stacked content handlers, and if we now say that we support stacked
> modules as long as they aren't content handlers, then a lot of people will
> wonder what the heck we are doing.
>
> There should be a way to specify ordering of the content handlers in the
> stack.

There is.  In fact, there are TWO ways to configure this.  The first way, is
to do it in the config file.  If you do:

AddOutputFilter INCLUDES PHP

Then mod_include will always be run before mod_php.  the second way is
for module authors to do this.  Each module has an insert_filters phase.  By
ordering the insert_filters phase, you can order which filter is called when.

If for some reason, the PHP developers always wanted to run before mod_include,
then they should specify that the php insert_filters phase runs before the 
mod_include insert_filters phase.

Ryan

__
Ryan Bloom  [EMAIL PROTECTED]
Covalent Technologies   [EMAIL PROTECTED]
--



Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-03 Thread William A. Rowe, Jr.

From: "Justin Erenkrantz" <[EMAIL PROTECTED]>
Sent: Monday, September 03, 2001 5:39 PM


> I'll jump in here now that I have an idea what you are talking 
> about.  I think our filter classifications can be:
> 
> handler--->content-filter->cache-filter->transfer-filter->network
> (default)  (mod_include,   (mod_cache)   (mod_gz{ip}, (core)
> mod_php)   ^  mod_proxy,
>|  byte ranges)
>  can short-cut 
>   handler and content-filters

And we don't proxy proxies???  mod_proxy (viewed as a handler, or origin
of a request response body) is most definately cached.  gzip can be cached.
Your 'transfer filter' category is _way_ to broad.








Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-03 Thread Graham Leggett

Ian Holsman wrote:

> I dont see why the cache-filter could not live anywhere in the filter chain
> it could sit just after the handler (where it could cache a report generator)
> which would then feed into php/include
> 
> it could sit after php/include and possibly after the gzip/byte ranges as well.

Because it's pointless to cache something twice.

The point behind mod_cache is to try and "walk the filter stack" as few
times as possible, and over as shorter distances as possible. The only
sane way of doing this is to cache as broadly as possible.

Remember you can define the URL prefix that is to be cached and how -
which in turn means that it theoretically possible to only cache
subrequests and not cache the main request. But - you will be doing this
because the user specifically configured their URLs like this, and not
because the module tried to second guess what the user wanted to
achieve.

Regards,
Graham
-- 
-
[EMAIL PROTECTED]"There's a moon
over Bourbon Street
tonight..."
 S/MIME Cryptographic Signature


Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-03 Thread William A. Rowe, Jr.

From: "Graham Leggett" <[EMAIL PROTECTED]>
Sent: Monday, September 03, 2001 11:30 AM


> Ryan Bloom wrote:
> 
> > But keeping it simple would essentially make the cache less useful.  If I request
> > a pdf file using three different browsers, the server will most likely have three 
>different
> > copies of the same file.  One with byteranges, one with chunks, and one with
> > neither.
> 
> This returns to the point about whether the cache should store data with
> the transfer encodings applied, or not.
>
> I think that the cache should store data *without* transfer encodings
> applied: Ie not chunked and not byteranged. This solves your problem.

WFT?!?  I've been letting this conversation slide (to avoid IO) but this is
absurd.  OF COURSE you don't apply transfer mechanics (e.g. byteranges, chunking
etc) to a cache!!!  They aren't reusable - they are likely meaningless to any
other request.  You will waste more time searching the cache than you save with
occasional hits to it.

A transfer encoding isn't a byterange or chunking output.  It's a compression
scheme, and that we _want_ to cache, to avoid the cpu overhead.

Handler (e.g. Core/autoindex/mod_webapp etc)
 V
Includes and other Filters
 V
Charset Translation (Transform to Client's preference)
 V
Content Encoding (gz) (Body - large packets - higher compression)
 V
 X <<< cache here
 V
Byterange
 V
Chunking
 V
Headers
 V
SSL Crypto
 V
Network I/O






Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-03 Thread Ian Holsman

Graham Leggett wrote:

> Justin Erenkrantz wrote:
> 
> 
>>handler--->content-filter->cache-filter->transfer-filter->network
>>(default)  (mod_include,   (mod_cache)   (mod_gz{ip}, (core)
>>mod_php)   ^  mod_proxy,
>>   |  byte ranges)
>> can short-cut
>>  handler and content-filters
>>
> 
> Almost - mod_proxy is a handler, not a transfer filter (otherwise you
> could never cache proxy requests):
> 

just to add my 2c to the picture.
I dont see why the cache-filter could not live anywhere in the filter chain
it could sit just after the handler (where it could cache a report generator)
which would then feed into php/include

it could sit after php/include and possibly after the gzip/byte ranges as well.

the thing it needs to do, (which I haven't seen yet) is address how it uniquely
identifies what is the same request.

It needs to be cofigurable so that it could use the
* incoming vhost+request (simple case)
* the user agent
* a cookie value (or part of)
* any part of the incoming request header.


so.. you might have something like
SetOutputfilter CACHE INCLUDE GZ
CACHECRITERIA REQ, UserAgent
or
SetOutputFilter INCLUDE GZ CACHE
CACHECRITERIA REQ, Cookie: Foo+8 (last 8 bytes of Foo)

..Ian

(on a side note this would be a great way to implment Edge Side Includes
in 2.0  http://www.esi.org)


> Basically, there are three "states" of operation, answering the question
> "is this URL cached" with the answers "yes", "no" and "maybe". The
> mod_cache handler works out each "state", and in each "state", the
> filter stack is set up to look like this:
> 
> o NO - a virgin URL
> 
> handler -> content -> CACHE_IN -> transfer -> core
> (mod_cache (mod_include   (mod_gzip,
> mod_proxy   mod_php)   BYTERANGE)
> mod_core)
> 
> o YES - a cached URL
> 
> handler -> CACHE_OUT -> transfer -> core
> 
> o MAYBE - a stale URL
> 
> handler -> content -> CACHE_CONDITIONAL -> CACHE_IN|CACHE_OUT ->
> transfer -> core
> 
> To sum up, the cache is always first and last (last except for transfer
> encodings) so ordering of content filters should not matter to
> mod_cache.
> 
> Regards,
> Graham
> 






Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-03 Thread Graham Leggett

Justin Erenkrantz wrote:

> handler--->content-filter->cache-filter->transfer-filter->network
> (default)  (mod_include,   (mod_cache)   (mod_gz{ip}, (core)
> mod_php)   ^  mod_proxy,
>|  byte ranges)
>  can short-cut
>   handler and content-filters

Almost - mod_proxy is a handler, not a transfer filter (otherwise you
could never cache proxy requests):

Basically, there are three "states" of operation, answering the question
"is this URL cached" with the answers "yes", "no" and "maybe". The
mod_cache handler works out each "state", and in each "state", the
filter stack is set up to look like this:

o NO - a virgin URL

handler -> content -> CACHE_IN -> transfer -> core
(mod_cache (mod_include   (mod_gzip,
mod_proxy   mod_php)   BYTERANGE)
mod_core)

o YES - a cached URL

handler -> CACHE_OUT -> transfer -> core

o MAYBE - a stale URL

handler -> content -> CACHE_CONDITIONAL -> CACHE_IN|CACHE_OUT ->
transfer -> core

To sum up, the cache is always first and last (last except for transfer
encodings) so ordering of content filters should not matter to
mod_cache.

Regards,
Graham
-- 
-
[EMAIL PROTECTED]"There's a moon
over Bourbon Street
tonight..."
 S/MIME Cryptographic Signature


Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-03 Thread Rasmus Lerdorf

> Multiple filters in the chain for each classification can exist
> (ordering between classifications shouldn't matter...)  This
> way you can have a URL handled by mod_include and mod_php (but
> the mod_include portion can't create PHP tags and vice versa
> since you can't guarantee when it will run in relation to the
> other).
>
> I have no clue how this relates to our code or how others sees
> this.  This is my quick uninformed birds-eye view.  Thoughts?
> This ordering seems to be a problem that we need to address.

Definitely.  One of the most requested features in the past has been
stacked content handlers, and if we now say that we support stacked
modules as long as they aren't content handlers, then a lot of people will
wonder what the heck we are doing.

There should be a way to specify ordering of the content handlers in the
stack.

-Rasmus




Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-03 Thread Justin Erenkrantz

On Mon, Sep 03, 2001 at 06:30:54PM +0200, Graham Leggett wrote:
> I think that the cache should store data *without* transfer encodings
> applied: Ie not chunked and not byteranged. This solves your problem.

I'll jump in here now that I have an idea what you are talking 
about.  I think our filter classifications can be:

handler--->content-filter->cache-filter->transfer-filter->network
(default)  (mod_include,   (mod_cache)   (mod_gz{ip}, (core)
mod_php)   ^  mod_proxy,
   |  byte ranges)
 can short-cut 
  handler and content-filters

Multiple filters in the chain for each classification can exist
(ordering between classifications shouldn't matter...)  This
way you can have a URL handled by mod_include and mod_php (but
the mod_include portion can't create PHP tags and vice versa
since you can't guarantee when it will run in relation to the
other).

I have no clue how this relates to our code or how others sees
this.  This is my quick uninformed birds-eye view.  Thoughts? 
This ordering seems to be a problem that we need to address.  
-- justin




Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-03 Thread Graham Leggett

Ryan Bloom wrote:

> But keeping it simple would essentially make the cache less useful.  If I request
> a pdf file using three different browsers, the server will most likely have three 
>different
> copies of the same file.  One with byteranges, one with chunks, and one with
> neither.

This returns to the point about whether the cache should store data with
the transfer encodings applied, or not.

I think that the cache should store data *without* transfer encodings
applied: Ie not chunked and not byteranged. This solves your problem.

If we do need to do anything clever (AKA potentially confusing) like
apply a gzip transfer encoding before caching content (or applying a
gunzip filter if the opposite is true) it's done within the
cache_storage.c code - thus keeping "potentially confusing" stuff out of
the Apache filter stacks.

Regards,
Graham
-- 
-
[EMAIL PROTECTED]"There's a moon
over Bourbon Street
tonight..."
 S/MIME Cryptographic Signature


Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-03 Thread Graham Leggett

Greg Marr wrote:

> How exactly do you use Cache-Control directives so that the content that
> is cached is before includes are processed, and that when it is
> retrieved from the cache, the includes are processed?  It just doesn't
> work that way.  In this case you have to put the includes before the
> cache.

mod_cache and mod_include should have no knowledge of each other.
mod_cache is interested in content going to the browser. There are
already two caches in the loop (a transparent ISP cache, and the browser
cache) so if mod_include doesn't generate proper Cache-Control: headers
then mod_includes is broken already without any help from mod_cache.

Any Cache-Control headers generated by CGIs (or whatever) embedded in
includes should already be combined intelligently into the final output
result otherwise mod_include is broken now.

> > mod_cache should behave exactly like a transparent cache would.
> 
> In your application, yes, not in the one in question.

I don't see any reason why mod_cache should interfere with mod_include
(or vice versa). mod_cache only cares about what is spat out at the end
of the filter chain - how that filter chain is constructed is not
important to mod_cache (or any transparent cache or browser cache) at
all.

One of the fundamental design points about mod_cache was to separate it
from all other modules (specifically mod_proxy). Tying mod_cache
behaviour to mod_include (or any other module) is a step backwards in
the design.

Regards,
Graham
-- 
-
[EMAIL PROTECTED]"There's a moon
over Bourbon Street
tonight..."
 S/MIME Cryptographic Signature


mod_include Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-01 Thread Brian Pane

  Graham Leggett wrote:

>Bill Stoddard wrote:
>
>>Yep, you definitely need CACHE_OUT to be a CONTENT filter in this case since 
>INCLUDES is a
>>CONTENT filter and you need INCLUDES to be run after CACHE_OUT.
>>
>
>I disagree - includes is something that should be cached as it is a
>performance bottleneck.
>
Yes, include processing is a performance bottleneck.  But some of us are
trying to fix that. :-)

mod_include's slowness is due mostly to implementation details, rather
than any fundamental architectural limitations.  For example, it's not
uncommon for mod_include to spend a third of its execution time setting
environment variables that are never read.

The two patches that I recently posted (one for the environment variable
code, the other for the code that splits buckets if the buffered data
is too large) should help streamline mod_include so that it spends most
of its time doing what one would expect: scanning the content to look
for SSI directives.

In addition, Ian is working on improvements to the parser logic itself--
e.g., scanning every 5th character, rather than every character, when
looking for a '

Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-01 Thread Ryan Bloom

On Saturday 01 September 2001 11:20, Graham Leggett wrote:
> Ryan Bloom wrote:
> > > The core question is whether we store data in the cache with transfer
> > > encodings already applied.
> >
> > I would put it before the content encodings, but after the content
> > filters.  My reasoning is simple.  Content encodings tend to be fast, but
> > content filtering tends to be slow. Cache the slow stuff, ignore the fast
> > stuff.
>
> But from a keep-it-simple point of view, if we make the cache the very
> last filter, and then make it behave exactly like a transparent cache,
> then we have a good chance that it will "just work", because the HTTP
> protocol defines the correct behavior already and transparent caches are
> widely deployed.
>
> If we start moving it up and down the filter chain, we're likely to
> introduce some nasty what-if's that we have not encoutered before.

But keeping it simple would essentially make the cache less useful.  If I request
a pdf file using three different browsers, the server will most likely have three 
different
copies of the same file.  One with byteranges, one with chunks, and one with
neither.  That is a waste of space in the server, and chunking and byterange are
incredibly cheap operations with bucket brigades.  We have very well defined
locations for filters, and if somebody tries to modify the content after the start of
the HTTP_HEADER_FILTER ftype begins, the cache will be the least of our
problems.

Ryan

__
Ryan Bloom  [EMAIL PROTECTED]
Covalent Technologies   [EMAIL PROTECTED]
--



Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-01 Thread Greg Marr

Graham Leggett <[EMAIL PROTECTED]> wrote:
> Greg Marr wrote:
> 
> > In Ian's particular case, that is incorrect.  The value of his
> > includes vary from request to request, so he needs the cache to
> > be before the includes filter.
> 
> This isn't necessary - simply use the Cache-Control directives
> correctly so that the includes content is not cached.

How exactly do you use Cache-Control directives so that the content that
is cached is before includes are processed, and that when it is
retrieved from the cache, the includes are processed?  It just doesn't
work that way.  In this case you have to put the includes before the
cache.

> mod_cache should behave exactly like a transparent cache would.

In your application, yes, not in the one in question.

> No, I'm saying use the Cache-Control directives correctly exactly as
> a transparent proxy would.

That's not the desired behavior.



Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-01 Thread Graham Leggett

Ryan Bloom wrote:

> > The core question is whether we store data in the cache with transfer
> > encodings already applied.
> 
> I would put it before the content encodings, but after the content filters.  My
> reasoning is simple.  Content encodings tend to be fast, but content filtering
> tends to be slow. Cache the slow stuff, ignore the fast stuff.

But from a keep-it-simple point of view, if we make the cache the very
last filter, and then make it behave exactly like a transparent cache,
then we have a good chance that it will "just work", because the HTTP
protocol defines the correct behavior already and transparent caches are
widely deployed.

If we start moving it up and down the filter chain, we're likely to
introduce some nasty what-if's that we have not encoutered before.

Regards,
Graham
-- 
-
[EMAIL PROTECTED]"There's a moon
over Bourbon Street
tonight..."
 S/MIME Cryptographic Signature


Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-01 Thread Graham Leggett

Greg Marr wrote:

> In Ian's particular case, that is incorrect.  The value of his includes
> vary from request to request, so he needs the cache to be before the
> includes filter.

This isn't necessary - simply use the Cache-Control directives correctly
so that the includes content is not cached.

Remember that there is already a cache (in the form of an ISP
transparent cache) between the browser and server anyway (in most
cases), mod_cache should behave exactly like a transparent cache would.

> You're saying that we should override the user's wishes and cache the
> page with the request-specific information instead of before these are
> added.

No, I'm saying use the Cache-Control directives correctly exactly as a
transparent proxy would.

Regards,
Graham
-- 
-
[EMAIL PROTECTED]"There's a moon
over Bourbon Street
tonight..."
 S/MIME Cryptographic Signature


Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-01 Thread Ryan Bloom

On Saturday 01 September 2001 05:51, Graham Leggett wrote:
> Ryan Bloom wrote:
> > My own opinion is that the cache should be the last content filter run. 
> > Basically, it should probably be specified as the first HTTP_HEADER
> > filter type.
>
> The core question is whether we store data in the cache with transfer
> encodings already applied.

I would put it before the content encodings, but after the content filters.  My
reasoning is simple.  Content encodings tend to be fast, but content filtering
tends to be slow. Cache the slow stuff, ignore the fast stuff.

Ryan

__
Ryan Bloom  [EMAIL PROTECTED]
Covalent Technologies   [EMAIL PROTECTED]
--



Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-01 Thread Greg Marr

On Sat, 01 Sep 2001 14:47:55 +0200
 Graham Leggett <[EMAIL PROTECTED]> wrote:
> Bill Stoddard wrote:
> 
> > Yep, you definitely need CACHE_OUT to be a CONTENT filter in this
> > case since INCLUDES is a CONTENT filter and you need INCLUDES to
> > be run after CACHE_OUT.
> 
> I disagree - includes is something that should be cached as it is a
> performance bottleneck.

In Ian's particular case, that is incorrect.  The value of his includes
vary from request to request, so he needs the cache to be before the
includes filter.

> If the user specifies "cache this URL range" it would be wrong to
> override the user's wishes and not cache something.

You're saying that we should override the user's wishes and cache the
page with the request-specific information instead of before these are
added.



Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-01 Thread Graham Leggett

Ryan Bloom wrote:

> My own opinion is that the cache should be the last content filter run.  Basically,
> it should probably be specified as the first HTTP_HEADER filter type.

The core question is whether we store data in the cache with transfer
encodings already applied.

Regards,
Graham
-- 
-
[EMAIL PROTECTED]"There's a moon
over Bourbon Street
tonight..."
 S/MIME Cryptographic Signature


Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-01 Thread Graham Leggett

Bill Stoddard wrote:

> I'm a bit fuzzy on how to run the GZIP filter from CACHE_IN but I assume something 
>clean
> can be done. Detecting if the client supports unzip and conditionally installing 
>GUNZIP is
> simple and should just work without resorting to anything unnatural.

The cache_storage.c was designed to be the place where such
optimisations happen. Data is passed to it as a brigade, so it should be
relatively easy to pass that brigade through specific filters like GZIP
(or GUNZIP) before handing the brigades to the caching subfilters.

Regards,
Graham
-- 
-
[EMAIL PROTECTED]"There's a moon
over Bourbon Street
tonight..."
 S/MIME Cryptographic Signature


Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-09-01 Thread Graham Leggett

Bill Stoddard wrote:

> Yep, you definitely need CACHE_OUT to be a CONTENT filter in this case since 
>INCLUDES is a
> CONTENT filter and you need INCLUDES to be run after CACHE_OUT.

I disagree - includes is something that should be cached as it is a
performance bottleneck.

If mod_includes needs to bypass the cache then Cache-Control directives
should be applied. 

If the user specifies "cache this URL range" it would be wrong to
override the user's wishes and not cache something.

Regards,
Graham
-- 
-
[EMAIL PROTECTED]"There's a moon
over Bourbon Street
tonight..."
 S/MIME Cryptographic Signature


Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-08-31 Thread Ian Holsman

On Fri, 2001-08-31 at 14:17, Bill Stoddard wrote:
> > > >
> > > > My own opinion is that the cache should be the last content filter run.  
>Basically,
> > > > it should probably be specified as the first HTTP_HEADER filter type.
> >
> > not necessarily.
> > we have a situation where we need to uniquly modify outgoing HTML to
> > insert ads and tracking things into the HTML (which is different for
> > each user)
> > we would mod_cache in the middle of the content chain.
> > (ie cache the result from the CGI/proxy call) and then run a mod-include
> > filter on top of that (possibly pushing the result through gzip)
> >
> 
> Yep, you definitely need CACHE_OUT to be a CONTENT filter in this case since 
>INCLUDES is a
> CONTENT filter and you need INCLUDES to be run after CACHE_OUT. CACHE_OUT needs to 
>be the
> first CONTENT filter run (or alternately, just move the CACHE_OUT function directly 
>into
> the handler).
> 
> When you mention inserting ads into an HTML stream, I am trying to understand how 
>this
> works.  All the output from a page constructed with INCLUDES must be the same mime 
>type
> (text/html, whatever). That would seem to be a considerable limitation to using SSI 
>(or
> custom tags) to assemble pages.
we do it via custom SSI tags. 
the actual HTML image reference changes 


% curl www.cnet.com >a
% curl www.cnet.com >b
% diff a b
and you'll notice that HTML is slightly different in each case.
> 
> Bill
> 
> 
> 
> 
> 
> 
-- 
Ian Holsman  [EMAIL PROTECTED]
Performance Measurement & Analysis
CNET Networks   -   (415) 364-8608




Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-08-31 Thread Bill Stoddard

> > >
> > > My own opinion is that the cache should be the last content filter run.  
>Basically,
> > > it should probably be specified as the first HTTP_HEADER filter type.
>
> not necessarily.
> we have a situation where we need to uniquly modify outgoing HTML to
> insert ads and tracking things into the HTML (which is different for
> each user)
> we would mod_cache in the middle of the content chain.
> (ie cache the result from the CGI/proxy call) and then run a mod-include
> filter on top of that (possibly pushing the result through gzip)
>

Yep, you definitely need CACHE_OUT to be a CONTENT filter in this case since INCLUDES 
is a
CONTENT filter and you need INCLUDES to be run after CACHE_OUT. CACHE_OUT needs to be 
the
first CONTENT filter run (or alternately, just move the CACHE_OUT function directly 
into
the handler).

When you mention inserting ads into an HTML stream, I am trying to understand how this
works.  All the output from a page constructed with INCLUDES must be the same mime type
(text/html, whatever). That would seem to be a considerable limitation to using SSI (or
custom tags) to assemble pages.

Bill










Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-08-31 Thread Ian Holsman

On Fri, 2001-08-31 at 13:17, Bill Stoddard wrote:
> 
> > On Friday 31 August 2001 11:48, Graham Leggett wrote:
> > > Bill Stoddard wrote:
> > > > How do you handle things like byterange requests if CACHE_IN is a network
> > > > filter? The byterange filter will filter out all but the range requested
> > > > so the CACHE_IN filter will never see the full response.  Ditto the
> > > > output chunking filter. Also, there could be various content translation
> > > > filters installed in the filter stack (ASCII <--> EBCDIC, language
> > > > translation, whatever. The list is indeterminate so we cannot reliably
> > > > put code into CACHE_IN to detect these conditions and not cache.
> > >
> > > Hmmm - ok...
> > >
> > > Part of the job of cache_storage.c is to handle optimisations. What
> > > CACHE_IN can do is apply mod_gzip before delivering the content to the
> > > cache, and if necessary mod_gunzip can be applied by CACHE_OUT before
> > > delivery to any browser who did not negotiate a gzip encoding.
> 
> I'm a bit fuzzy on how to run the GZIP filter from CACHE_IN but I assume something 
>clean
> can be done. Detecting if the client supports unzip and conditionally installing 
>GUNZIP is
> simple and should just work without resorting to anything unnatural.

(hmm.. did someone apply my GZIP filter contribution??)

> 
> >
> > My own opinion is that the cache should be the last content filter run.  Basically,
> > it should probably be specified as the first HTTP_HEADER filter type.

not necessarily. 
we have a situation where we need to uniquly modify outgoing HTML to
insert ads and tracking things into the HTML (which is different for
each user)
we would mod_cache in the middle of the content chain. 
(ie cache the result from the CGI/proxy call) and then run a mod-include
filter on top of that (possibly pushing the result through gzip)

> >
> > Ryan
> 
> I was playing around with AP_FTYPE_CONTENT+1 :-) yes, it's a hack.  Maybe introduce
> AP_FTYPE_CACHE and position it right between CONTENT and HTTP_HEADER to prevent any
> clashes with third party modules... I am concerned about module FTYPE clashes in
> general... We should keep to a minimum the cases where a filter relies on relative
> position within its FTYPE class.
> 
> Bill
-- 
Ian Holsman  [EMAIL PROTECTED]
Performance Measurement & Analysis
CNET Networks   -   (415) 364-8608




Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-08-31 Thread Ryan Bloom

On Friday 31 August 2001 13:17, Bill Stoddard wrote:
> > On Friday 31 August 2001 11:48, Graham Leggett wrote:
> > > Bill Stoddard wrote:
> > > > How do you handle things like byterange requests if CACHE_IN is a
> > > > network filter? The byterange filter will filter out all but the
> > > > range requested so the CACHE_IN filter will never see the full
> > > > response.  Ditto the output chunking filter. Also, there could be
> > > > various content translation filters installed in the filter stack
> > > > (ASCII <--> EBCDIC, language translation, whatever. The list is
> > > > indeterminate so we cannot reliably put code into CACHE_IN to detect
> > > > these conditions and not cache.
> > >
> > > Hmmm - ok...
> > >
> > > Part of the job of cache_storage.c is to handle optimisations. What
> > > CACHE_IN can do is apply mod_gzip before delivering the content to the
> > > cache, and if necessary mod_gunzip can be applied by CACHE_OUT before
> > > delivery to any browser who did not negotiate a gzip encoding.
>
> I'm a bit fuzzy on how to run the GZIP filter from CACHE_IN but I assume
> something clean can be done. Detecting if the client supports unzip and
> conditionally installing GUNZIP is simple and should just work without
> resorting to anything unnatural.
>
> > My own opinion is that the cache should be the last content filter run. 
> > Basically, it should probably be specified as the first HTTP_HEADER
> > filter type.
> >
> > Ryan
>
> I was playing around with AP_FTYPE_CONTENT+1 :-) yes, it's a hack.  Maybe
> introduce AP_FTYPE_CACHE and position it right between CONTENT and
> HTTP_HEADER to prevent any clashes with third party modules... I am
> concerned about module FTYPE clashes in general... We should keep to a
> minimum the cases where a filter relies on relative position within its
> FTYPE class.

That is why I think it should happen as the first HTTP_HEADER filter.  This filter
is essentially dealing with meta-data, whether the data can be cached, and 
this FTYPE is essentially used to indicate that all meta-data has been
generated by the time this filter type is hit.

Ryan

__
Ryan Bloom  [EMAIL PROTECTED]
Covalent Technologies   [EMAIL PROTECTED]
--



Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-08-31 Thread Bill Stoddard


> On Friday 31 August 2001 11:48, Graham Leggett wrote:
> > Bill Stoddard wrote:
> > > How do you handle things like byterange requests if CACHE_IN is a network
> > > filter? The byterange filter will filter out all but the range requested
> > > so the CACHE_IN filter will never see the full response.  Ditto the
> > > output chunking filter. Also, there could be various content translation
> > > filters installed in the filter stack (ASCII <--> EBCDIC, language
> > > translation, whatever. The list is indeterminate so we cannot reliably
> > > put code into CACHE_IN to detect these conditions and not cache.
> >
> > Hmmm - ok...
> >
> > Part of the job of cache_storage.c is to handle optimisations. What
> > CACHE_IN can do is apply mod_gzip before delivering the content to the
> > cache, and if necessary mod_gunzip can be applied by CACHE_OUT before
> > delivery to any browser who did not negotiate a gzip encoding.

I'm a bit fuzzy on how to run the GZIP filter from CACHE_IN but I assume something 
clean
can be done. Detecting if the client supports unzip and conditionally installing 
GUNZIP is
simple and should just work without resorting to anything unnatural.

>
> My own opinion is that the cache should be the last content filter run.  Basically,
> it should probably be specified as the first HTTP_HEADER filter type.
>
> Ryan

I was playing around with AP_FTYPE_CONTENT+1 :-) yes, it's a hack.  Maybe introduce
AP_FTYPE_CACHE and position it right between CONTENT and HTTP_HEADER to prevent any
clashes with third party modules... I am concerned about module FTYPE clashes in
general... We should keep to a minimum the cases where a filter relies on relative
position within its FTYPE class.

Bill




Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-08-31 Thread Ryan Bloom

On Friday 31 August 2001 11:48, Graham Leggett wrote:
> Bill Stoddard wrote:
> > How do you handle things like byterange requests if CACHE_IN is a network
> > filter? The byterange filter will filter out all but the range requested
> > so the CACHE_IN filter will never see the full response.  Ditto the
> > output chunking filter. Also, there could be various content translation
> > filters installed in the filter stack (ASCII <--> EBCDIC, language
> > translation, whatever. The list is indeterminate so we cannot reliably
> > put code into CACHE_IN to detect these conditions and not cache.
>
> Hmmm - ok...
>
> Part of the job of cache_storage.c is to handle optimisations. What
> CACHE_IN can do is apply mod_gzip before delivering the content to the
> cache, and if necessary mod_gunzip can be applied by CACHE_OUT before
> delivery to any browser who did not negotiate a gzip encoding.

My own opinion is that the cache should be the last content filter run.  Basically,
it should probably be specified as the first HTTP_HEADER filter type.

Ryan

__
Ryan Bloom  [EMAIL PROTECTED]
Covalent Technologies   [EMAIL PROTECTED]
--



Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-08-31 Thread Graham Leggett

Bill Stoddard wrote:

> How do you handle things like byterange requests if CACHE_IN is a network filter? The
> byterange filter will filter out all but the range requested so the CACHE_IN filter 
>will
> never see the full response.  Ditto the output chunking filter. Also, there could be
> various content translation filters installed in the filter stack (ASCII <--> EBCDIC,
> language translation, whatever. The list is indeterminate so we cannot reliably put 
>code
> into CACHE_IN to detect these conditions and not cache.

Hmmm - ok...

Part of the job of cache_storage.c is to handle optimisations. What
CACHE_IN can do is apply mod_gzip before delivering the content to the
cache, and if necessary mod_gunzip can be applied by CACHE_OUT before
delivery to any browser who did not negotiate a gzip encoding.

Regards,
Graham  
-- 
-
[EMAIL PROTECTED]"There's a moon
over Bourbon Street
tonight..."
 S/MIME Cryptographic Signature


Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-08-31 Thread Bill Stoddard


> [EMAIL PROTECTED] wrote:
>
> >   Make CACHE_IN and CACHE_CONDITIONAL AP_FTYPE_CONTENT filters.  Comtemplating
> >   making a new filter type, AP_FTYPE_CACHE.  We need to run CACHE_IN immediately
> >   after the handlers are done and before we run the content through any filters.
>
> In the original design the cache should be run as the very first
> handler, and the very last filter.
>
> This means that the gzip filter (for example) should run before the
> cache filter, so that gzipped data ends up in the cache, thus to save
> space within the cache, and save processing power when delivering
> content to clients.
>
> Regards,
> Graham

How do you handle things like byterange requests if CACHE_IN is a network filter? The
byterange filter will filter out all but the range requested so the CACHE_IN filter 
will
never see the full response.  Ditto the output chunking filter. Also, there could be
various content translation filters installed in the filter stack (ASCII <--> EBCDIC,
language translation, whatever. The list is indeterminate so we cannot reliably put 
code
into CACHE_IN to detect these conditions and not cache.

Bill






Re: cvs commit: httpd-2.0/modules/experimental mod_cache.c

2001-08-30 Thread Graham Leggett

[EMAIL PROTECTED] wrote:

>   Make CACHE_IN and CACHE_CONDITIONAL AP_FTYPE_CONTENT filters.  Comtemplating
>   making a new filter type, AP_FTYPE_CACHE.  We need to run CACHE_IN immediately
>   after the handlers are done and before we run the content through any filters.

In the original design the cache should be run as the very first
handler, and the very last filter.

This means that the gzip filter (for example) should run before the
cache filter, so that gzipped data ends up in the cache, thus to save
space within the cache, and save processing power when delivering
content to clients.

Regards,
Graham 
-- 
-
[EMAIL PROTECTED]"There's a moon
over Bourbon Street
tonight..."
 S/MIME Cryptographic Signature