/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* mod_expires.c
* version 0.0.11
* status beta
*
* Andrew Wilson
26.Jan.96 *
* This module allows you to control the form of the Expires: header
* that Apache issues for each access. Directives can appear in
* configuration files or in .htaccess files so expiry semantics can
* be defined on a per-directory basis.
*
* DIRECTIVE SYNTAX
*
* Valid directives are:
*
* ExpiresActive on | off
* ExpiresDefault
* ExpiresByType type/encoding
*
* Valid values for are:
*
* 'M' expires header shows file modification date +
* 'A' expires header shows access time +
*
* [I'm not sure which of these is best under different
* circumstances, I guess it's for other people to explore.
* The effects may be indistinguishable for a number of cases]
*
* should be an integer value [acceptable to atoi()]
*
* There is NO space between the and .
*
* For example, a directory which contains information which changes
* frequently might contain:
*
* # reports generated by cron every hour. don't let caches
* # hold onto stale information
* ExpiresDefault M3600
*
* Another example, our html pages can change all the time, the gifs
* tend not to change often:
*
* # pages are hot (1 week), images are cold (1 month)
* ExpiresByType text/html A604800
* ExpiresByType image/gif A2592000
*
* Expires can be turned on for all URLs on the server by placing the
* following directive in a conf file:
*
* ExpiresActive on
*
* ExpiresActive can also appear in .htaccess files, enabling the
* behaviour to be turned on or off for each chosen directory.
*
* # turn off Expires behaviour in this directory
* # and subdirectories
* ExpiresActive off
*
* Directives defined for a directory are valid in subdirectories
* unless explicitly overridden by new directives in the subdirectory
* .htaccess files.
*
* ALTERNATIVE DIRECTIVE SYNTAX
*
* Directives can also be defined in a more readable syntax of the form:
*
* ExpiresDefault " [plus] { }*"
* ExpiresByType type/encoding " [plus] { }*"
*
* where is one of:
* access
* now equivalent to 'access'
* modification
*
* where the 'plus' keyword is optional
*
* where should be an integer value [acceptable to atoi()]
*
* where is one of:
* years
* months
* weeks
* days
* hours
* minutes
* seconds
*
* For example, any of the following directives can be used to make
* documents expire 1 month after being accessed, by default:
*
* ExpiresDefault "access plus 1 month"
* ExpiresDefault "access plus 4 weeks"
* ExpiresDefault "access plus 30 days"
*
* The expiry time can be fine-tuned by adding several ' '
* clauses:
*
* ExpiresByType text/html "access plus 1 month 15 days 2 hours"
* ExpiresByType image/gif "modification plus 5 hours 3 minutes"
*
* ---
*
* Change-log:
* 29.Jan.96 Hardened the add_* functions. Server will now bail out
* if bad directives are given in the conf files.
* 02.Feb.96 Returns DECLINED if not 'ExpiresActive on', giving other
* expires-aware modules a chance to play with the same
* directives. [Michael Rutman]
* 03.Feb.96 Call tzset() before localtime(). Trying to get the module
* to work properly in non GMT timezones.
* 12.Feb.96 Modified directive syntax to allow more readable commands:
* ExpiresDefault "now plus 10 days 20 seconds"
* ExpiresDefault "access plus 30 days"
* ExpiresDefault "modification plus 1 year 10 months 30 days"
* 13.Feb.96 Fix call to table_get() with NULL 2nd parameter [Rob Hartill]
* 19.Feb.96 Call gm_timestr_822() to get time formatted correctly, can't
* rely on presence of HTTP_TIME_FORMAT in Apache 1.1+.
* 21.Feb.96 This version (0.0.9) reverses assumptions made in 0.0.8
* about star/star handlers. Reverting to 0.0.7 behaviour.
* 08.Jun.96 allows ExpiresDefault to be used with responses that use
* the DefaultType by not DECLINING, but instead skipping
* the table_get check and then looking for an ExpiresDefault.
* [Rob Hartill]
* 04.Nov.96 'const' definitions added.
*
* TODO
* add support for Cache-Control: max-age=20 from the HTTP/1.1
* proposal (in this case, a ttl of 20 seconds) [ask roy]
* add per-file expiry and explicit expiry times - duplicates some
* of the mod_cern_meta.c functionality. eg:
* ExpiresExplicit index.html "modification plus 30 days"
*
* BUGS
* Hi, welcome to the internet.
*/