httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jerenkra...@apache.org
Subject cvs commit: httpd-2.0/modules/experimental cache_util.c mod_cache.c mod_cache.h mod_disk_cache.c mod_mem_cache.c
Date Sat, 23 Oct 2004 17:45:55 GMT
jerenkrantz    2004/10/23 10:45:55

  Modified:    .        CHANGES
               docs/manual/mod mod_cache.xml
               modules/experimental cache_util.c mod_cache.c mod_cache.h
                        mod_disk_cache.c mod_mem_cache.c
  Log:
  mod_cache: Add CacheIgnoreHeaders directive.
  
  (Justin made some minor tweaks to the patch.)
  
  PR: 30399
  Submitted by:	Rüdiger Plüm <r.pluem@t-online.de>
  Reviewed by:	Justin Erenkrantz
  
  Revision  Changes    Path
  1.1618    +3 -0      httpd-2.0/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/CHANGES,v
  retrieving revision 1.1617
  retrieving revision 1.1618
  diff -u -u -r1.1617 -r1.1618
  --- CHANGES	23 Oct 2004 14:28:58 -0000	1.1617
  +++ CHANGES	23 Oct 2004 17:45:54 -0000	1.1618
  @@ -2,6 +2,9 @@
   
     [Remove entries to the current 2.0 section below, when backported]
   
  +  *) mod_cache: Add CacheIgnoreHeaders directive.  PR 30399.
  +     [Rüiger Plü <r.pluem t-online.de>]
  +
     *) WIN64: API changes to clean up Windows 64bit compile warnings
        [Allan Edwards]
   
  
  
  
  1.18      +54 -1     httpd-2.0/docs/manual/mod/mod_cache.xml
  
  Index: mod_cache.xml
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/docs/manual/mod/mod_cache.xml,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -u -r1.17 -r1.18
  --- mod_cache.xml	17 Apr 2004 10:49:22 -0000	1.17
  +++ mod_cache.xml	23 Oct 2004 17:45:54 -0000	1.18
  @@ -332,4 +332,57 @@
   </usage>
   </directivesynopsis>
   
  +<directivesynopsis>
  +<name>CacheIgnoreHeaders</name>
  +<description>Do not store the given HTTP header(s) in the cache.
  +</description>
  +<syntax>CacheIgnoreHeaders <var>header-string</var> [<var>header-string</var>]
...</syntax>
  +<default>CacheIgnoreHeaders None</default>
  +<contextlist><context>server config</context><context>virtual host</context>
  +</contextlist>
  +
  +<usage>
  +    <p>According to RFC 2616, hop-by-hop HTTP headers are not stored in
  +    the cache.  The following HTTP headers are hop-by-hop headers and thus
  +    do not get stored in the cache in <em>any</em> case regardless of the
  +    setting of <directive>CacheIgnoreHeaders</directive>:</p>
  +
  +    <ul>
  +      <li><code>Connection</code></li>
  +      <li><code>Keep-Alive</code></li>
  +      <li><code>Proxy-Authenticate</code></li>
  +      <li><code>Proxy-Authorization</code></li>
  +      <li><code>TE</code></li>
  +      <li><code>Trailers</code></li>
  +      <li><code>Transfer-Encoding</code></li>
  +      <li><code>Upgrade</code></li>
  +    </ul>
  +
  +    <p><directive>CacheIgnoreHeaders</directive> specifies additional
HTTP
  +    headers that should not to be stored in the cache.  For example, it makes
  +    sense in some cases to prevent cookies from being stored in the cache.</p>
  +
  +    <p><directive>CacheIgnoreHeaders</directive> takes a space separated
list
  +    of HTTP headers that should not be stored in the cache. If only hop-by-hop
  +    headers not should be stored in the cache (the RFC 2616 compliant
  +    behaviour), <directive>CacheIgnoreHeaders</directive> can be set to
  +    <code>None</code>.</p>
  +
  +    <example><title>Example 1</title>
  +      CacheIgnoreHeaders Set-Cookie
  +    </example>
  +
  +    <example><title>Example 2</title>
  +      CacheIgnoreHeaders None
  +    </example>
  +
  +    <note type="warning"><title>Warning:</title>
  +      If headers like <code>Expires</code> which are needed for proper cache
  +      management are not stored due to a
  +      <directive>CacheIgnoreHeaders</directive> setting, the behaviour of
  +      mod_cache is undefined.
  +    </note>
  +</usage>
  +</directivesynopsis>
  +
   </modulesynopsis>
  
  
  
  1.36      +18 -1     httpd-2.0/modules/experimental/cache_util.c
  
  Index: cache_util.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/modules/experimental/cache_util.c,v
  retrieving revision 1.35
  retrieving revision 1.36
  diff -u -u -r1.35 -r1.36
  --- cache_util.c	28 Sep 2004 17:37:54 -0000	1.35
  +++ cache_util.c	23 Oct 2004 17:45:54 -0000	1.36
  @@ -21,6 +21,8 @@
   
   /* -------------------------------------------------------------- */
   
  +extern module AP_MODULE_DECLARE_DATA cache_module;
  +
   /* return true if the request is conditional */
   CACHE_DECLARE(int) ap_cache_request_is_conditional(apr_table_t *table)
   {
  @@ -517,8 +519,13 @@
    * headers table that are allowed to be stored in a cache.
    */
   CACHE_DECLARE(apr_table_t *)ap_cache_cacheable_hdrs_out(apr_pool_t *pool,
  -                                                        apr_table_t *t)
  +                                                        apr_table_t *t,
  +                                                        server_rec *s)
   {
  +    cache_server_conf *conf;
  +    char **header;
  +    int i;
  +
       /* Make a copy of the headers, and remove from
        * the copy any hop-by-hop headers, as defined in Section
        * 13.5.1 of RFC 2616
  @@ -533,5 +540,15 @@
       apr_table_unset(headers_out, "Trailers");
       apr_table_unset(headers_out, "Transfer-Encoding");
       apr_table_unset(headers_out, "Upgrade");
  +
  +    conf = (cache_server_conf *)ap_get_module_config(s->module_config,
  +                                                     &cache_module);
  +    /* Remove the user defined headers set with CacheIgnoreHeaders.
  +     * This may break RFC 2616 compliance on behalf of the administrator.
  +     */
  +    header = (char **)conf->ignore_headers->elts;
  +    for (i = 0; i < conf->ignore_headers->nelts; i++) {
  +        apr_table_unset(headers_out, header[i]);
  +    }
       return headers_out;
   }
  
  
  
  1.95      +38 -0     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.94
  retrieving revision 1.95
  diff -u -u -r1.94 -r1.95
  --- mod_cache.c	18 Oct 2004 00:49:31 -0000	1.94
  +++ mod_cache.c	23 Oct 2004 17:45:54 -0000	1.95
  @@ -709,6 +709,9 @@
       ps->no_last_mod_ignore = 0;
       ps->ignorecachecontrol = 0;
       ps->ignorecachecontrol_set = 0 ;
  +    /* array of headers that should not be stored in cache */
  +    ps->ignore_headers = apr_array_make(p, 10, sizeof(char *));
  +    ps->ignore_headers_set = CACHE_IGNORE_HEADERS_UNSET;
       return ps;
   }
   
  @@ -745,6 +748,10 @@
           (overrides->ignorecachecontrol_set == 0)
           ? base->ignorecachecontrol
           : overrides->ignorecachecontrol;
  +    ps->ignore_headers =
  +        (overrides->ignore_headers_set == CACHE_IGNORE_HEADERS_UNSET)
  +        ? base->ignore_headers
  +        : overrides->ignore_headers;
       return ps;
   }
   static const char *set_cache_ignore_no_last_mod(cmd_parms *parms, void *dummy,
  @@ -774,6 +781,34 @@
       return NULL;
   }
   
  +static const char *add_ignore_header(cmd_parms *parms, void *dummy,
  +                                     const char *header)
  +{
  +    cache_server_conf *conf;
  +    char **new;
  +
  +    conf =
  +        (cache_server_conf *)ap_get_module_config(parms->server->module_config,
  +                                                  &cache_module);
  +    if (!strncasecmp(header, "None", 4)) {
  +        /* if header None is listed clear array */
  +        conf->ignore_headers->nelts = 0;
  +    }
  +    else {
  +        if ((conf->ignore_headers_set == CACHE_IGNORE_HEADERS_UNSET) ||
  +            (conf->ignore_headers->nelts)) {
  +            /* Only add header if no "None" has been found in header list
  +             * so far.
  +             * (When 'None' is passed, IGNORE_HEADERS_SET && nelts == 0.)
  +             */
  +            new = (char **)apr_array_push(conf->ignore_headers);
  +            (*new) = header;
  +        }
  +    }
  +    conf->ignore_headers_set = CACHE_IGNORE_HEADERS_SET;
  +    return NULL;
  +}
  +
   static const char *add_cache_enable(cmd_parms *parms, void *dummy, 
                                       const char *type, 
                                       const char *url)
  @@ -906,6 +941,9 @@
                     NULL, 
                     RSRC_CONF, 
                     "Ignore requests from the client for uncached content"),
  +    AP_INIT_ITERATE("CacheIgnoreHeaders", add_ignore_header, NULL, RSRC_CONF,
  +                    "A space separated list of headers that should not be "
  +                    "stored by the cache"),
       AP_INIT_TAKE1("CacheLastModifiedFactor", set_cache_factor, NULL, RSRC_CONF,
                     "The factor used to estimate Expires date from "
                     "LastModified date"),
  
  
  
  1.52      +9 -1      httpd-2.0/modules/experimental/mod_cache.h
  
  Index: mod_cache.h
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/modules/experimental/mod_cache.h,v
  retrieving revision 1.51
  retrieving revision 1.52
  diff -u -u -r1.51 -r1.52
  --- mod_cache.h	28 Sep 2004 17:37:54 -0000	1.51
  +++ mod_cache.h	23 Oct 2004 17:45:54 -0000	1.52
  @@ -133,6 +133,12 @@
       /** ignore client's requests for uncached responses */
       int ignorecachecontrol;
       int ignorecachecontrol_set;
  +    /** store the headers that should not be stored in the cache */
  +    apr_array_header_t *ignore_headers;
  +    /* flag if CacheIgnoreHeader has been set */
  +    #define CACHE_IGNORE_HEADERS_SET   1
  +    #define CACHE_IGNORE_HEADERS_UNSET 0
  +    int ignore_headers_set;
   } cache_server_conf;
   
   /* cache info information */
  @@ -255,7 +261,9 @@
   /* Create a new table consisting of those elements from a request_rec's
    * headers_out that are allowed to be stored in a cache
    */
  -CACHE_DECLARE(apr_table_t *)ap_cache_cacheable_hdrs_out(apr_pool_t *pool, apr_table_t *t);
  +CACHE_DECLARE(apr_table_t *)ap_cache_cacheable_hdrs_out(apr_pool_t *pool,
  +                                                        apr_table_t *t,
  +                                                        server_rec *s);
   
   /**
    * cache_storage.c
  
  
  
  1.67      +4 -2      httpd-2.0/modules/experimental/mod_disk_cache.c
  
  Index: mod_disk_cache.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/modules/experimental/mod_disk_cache.c,v
  retrieving revision 1.66
  retrieving revision 1.67
  diff -u -u -r1.66 -r1.67
  --- mod_disk_cache.c	2 Oct 2004 16:59:52 -0000	1.66
  +++ mod_disk_cache.c	23 Oct 2004 17:45:54 -0000	1.67
  @@ -606,7 +606,8 @@
           if (r->headers_out) {
               apr_table_t *headers_out;
   
  -            headers_out = ap_cache_cacheable_hdrs_out(r->pool, r->headers_out);
  +            headers_out = ap_cache_cacheable_hdrs_out(r->pool, r->headers_out,
  +                                                      r->server);
   
               if (!apr_table_get(headers_out, "Content-Type") &&
                   r->content_type) {
  @@ -627,7 +628,8 @@
           if (r->headers_in) {
               apr_table_t *headers_in;
   
  -            headers_in = ap_cache_cacheable_hdrs_out(r->pool, r->headers_in);
  +            headers_in = ap_cache_cacheable_hdrs_out(r->pool, r->headers_in,
  +                                                     r->server);
               rv = store_table(dobj->hfd, headers_in);
               if (rv != APR_SUCCESS) {
                   return rv;
  
  
  
  1.119     +5 -2      httpd-2.0/modules/experimental/mod_mem_cache.c
  
  Index: mod_mem_cache.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/modules/experimental/mod_mem_cache.c,v
  retrieving revision 1.118
  retrieving revision 1.119
  diff -u -u -r1.118 -r1.119
  --- mod_mem_cache.c	28 Sep 2004 17:37:54 -0000	1.118
  +++ mod_mem_cache.c	23 Oct 2004 17:45:55 -0000	1.119
  @@ -744,13 +744,16 @@
       /* Precompute how much storage we need to hold the headers */
       rc = serialize_table(&mobj->header_out, 
                            &mobj->num_header_out, 
  -                         ap_cache_cacheable_hdrs_out(r->pool, r->headers_out)); 
 
  +                         ap_cache_cacheable_hdrs_out(r->pool, r->headers_out,
  +                                                     r->server));
       if (rc != APR_SUCCESS) {
           return rc;
       }
       rc = serialize_table(&mobj->err_header_out, 
                            &mobj->num_err_header_out, 
  -                         ap_cache_cacheable_hdrs_out(r->pool, r->err_headers_out));
  
  +                         ap_cache_cacheable_hdrs_out(r->pool,
  +                                                     r->err_headers_out,
  +                                                     r->server));
       if (rc != APR_SUCCESS) {
           return rc;
       }
  
  
  

Mime
View raw message