Here's a patch for the CERN server which does just that. See
<http://www.nads.de/NADS/Ueberblick/heute> for an example what it
is good for. Said URI redirects the requestor to the event diary of
*today* of D?seldorf and about. An Expires header is appended to
the redirect response which makes it expire at midnight D?seldorf
time.
This patch also enables the proxy to cache URI with parameters, i.
e. with a '?' in it. However, this is not well tested and probably
buggy. But so far it didn't do any harm. The patch also makes
cgiutils to distinguish between its options -expires and -extra.
(Hey, what did Ari pin down when he wrote cgiutils? "Written in a
terrible hurry just before going to Italy..." Consequence: Never
write programs when being in a hurry. Contradiction: Following that
rule no programs would ever be written. :-)
Best regards
Rainer Klute
Dipl.-Inform. Rainer Klute NADS - Advertising on nets
NADS GmbH
Emil-Figge-Str. 80 Tel.: +49 231 9742570
D-44227 Dortmund Fax: +49 231 9742571
--- 1.1 1995/03/24 16:27:57
+++ ./WWW/Daemon/Implementation/HTDaemon.c 1995/03/24 16:34:06
@@ -13,6 +13,7 @@
** AL Ari Luotonen, CERN
** MD Mark Donszelmann, CERN
** FM Foteos Macrides, WFEB
+** RK Rainer Klute <klute@nads.de>
**
** History:
** Sep 91 TBL Made from earlier daemon files. (TBL)
@@ -65,6 +66,7 @@
** defined via "ServerRoot" in the configuration file.
** Commented out dead extern declarations.
** 8 Jul 94 FM Insulate free() from _free structure element.
+** 24 Mar 95 RK Cache queries
*/
/* (c) CERN WorldWideWeb project 1990-1992. See Copyright.html for details */
@@ -1739,7 +1741,7 @@
proxy_access = YES; /* Write to proxy log instead of access log */
HTImServer = HTReqTranslated;
- if (cc.cache_root && !req->authorization && !HTReqArgKeywords &&
+ if (cc.cache_root && !req->authorization &&
(req->method==METHOD_GET ||
(req->method==METHOD_HEAD &&
(!strncmp(HTReqTranslated,"ftp:",4) ||
--- 1.1 1995/03/24 16:25:37
+++ ./WWW/Daemon/Implementation/HTCache.c 1995/03/24 16:39:20
@@ -5,12 +5,15 @@
** AUTHORS:
** AL Ari Luotonen luotonen@dxcern.cern.ch
** FM Fote Macrides macrides@sci.wfeb.edu
+** RK Rainer Klute klute@nads.de
**
** HISTORY:
** 31 Jan 94 AL Written from scratch on a *very* beautiful
** Sunday afternoon -- seems like the spring
** is already coming, yippee!
** 8 Jul 94 FM Insulate free() from _free structure element.
+** 24 Mar 95 RK Brought one (!) of the many error messages
+** statically in the source (argh!) into HTML
**
** BUGS:
**
@@ -248,7 +251,7 @@
BOOL welcome = NO;
BOOL res = NO;
- if (!url || strchr(url, '?') || (res = reserved_name(url)) ||
+ if (!url || (res = reserved_name(url)) ||
!(access = HTParse(url, "", PARSE_ACCESS)) ||
(0 != strcmp(access, "http") &&
0 != strcmp(access, "ftp") &&
@@ -916,7 +919,7 @@
if (ch == LF || me->end >= me->last) {
if (me->state == CW_STATUS_LINE) {
me->status = get_status(me->buf);
- if (me->status != 200 &&
+ if (me->status != 200 && me->status != 302 &&
(me->status != 304 || !me->if_mod_since)) {
me->state = CW_JUNK;
buf_dump(me);
@@ -932,7 +935,9 @@
me->state = CW_UPDATED;
buf_discard(me);
}
- else if (me->status == 200) {
+ else if (me->status == 200 || me->status == 302) {
+ if (me->status == 302)
+ CTRACE(stderr,"Redirection response from remote\n");
if (figure_out_expires(me))
me->state = CW_COPY_BODY; /* Caching ok */
else
@@ -1054,7 +1059,7 @@
{
struct stat stat_info;
- if (out.status_code == 200 && me->status != 200 && me->status != 304)
+ if (out.status_code == 200 && me->status != 200 && me->status != 302 && me->status != 304)
out.status_code = me->status;
if (me->state == CW_COPY_BODY) {
--- 1.1 1995/03/24 16:27:57
+++ ./WWW/Daemon/Implementation/cgiutils.c 1995/03/24 16:40:57
@@ -8,10 +8,12 @@
**
** AUTHORS:
** AL Ari Luotonen luotonen@dxcern.cern.ch
+** RK Rainer Klute klute@nads.de
**
** HISTORY:
** 11 Mar 94 AL Written in a terrible hurry just before
** going to Italy...
+** 24 Mar 95 RK Bugfix to distinguish between -expires and -extra
**
** BUGS:
**
@@ -134,7 +136,7 @@
status = atoi(argv[i+1]);
else if (!strncmp(argv[i],"-reason",2))
reason = argv[i+1];
- else if (!strncmp(argv[i],"-expires",2))
+ else if (!strncmp(argv[i],"-expires",4))
expires = parse_expiry(argv[i+1]);
else if (!strncmp(argv[i],"-location",3))
location = argv[i+1];
@@ -148,7 +150,7 @@
content_language = argv[i+1];
else if (!strncmp(argv[i],"-uri",2))
uri = argv[i+1];
- else if (!strncmp(argv[i],"-extra",2)) {
+ else if (!strncmp(argv[i],"-extra",4)) {
char * buf = (char*)malloc(strlen(argv[i+1]) + 3);
sprintf(buf, "%s\r\n", argv[i+1]);
StrAllocCat(extras, buf);
--- 1.1 1995/03/24 16:27:57
+++ ./WWW/Daemon/Implementation/HTRequest.c 1995/03/24 16:43:14
@@ -5,12 +5,15 @@
** AUTHORS:
** AL Ari Luotonen luotonen@dxcern.cern.ch
** MD Mark Donszelmann duns@vxdeop.cern.ch
+** RK Rainer Klute klute@nads.de
**
** HISTORY:
** 11 Dec 93 AL Written based on the old HTHandle().
** 8 Jul 94 FM Insulate free() from _free structure element.
** Replaced free() with FREE() is some places where
** the pointer might already have been freed.
+** 24 Mar 95 RK Brought one (!) of the many error messages
+** statically in the source (argh!) into HTML
*/
#include <string.h>
@@ -484,12 +487,13 @@
/*
* Arrgh... ugly!
*/
- sprintf(body, "%s%s%s%s%s%s%s%s%s",
+ sprintf(body, "%s%s%s%s%s%s%s%s%s%s",
"<HTML>\n<HEAD>\n<TITLE>Redirection</TITLE>\n</HEAD>\n<BODY>\n",
- "<H1>Redirection</H1>\nThis document can be found\n<A HREF=\"",
+ "<H1>Redirection</H1>\n<P>This document can be found\n<A HREF=\"",
url,
- "\">elsewhere.</A><P>\nYou see this message because your browser ",
- "doesn't support automatic\nredirection handeling. <P>\n<HR>\n",
+ "\">elsewhere.</A></P>\n<P>You see this message because your",
+ "browser doesn't support automatic redirection handling.</P>\n",
+ "<HR>\n",
"<ADDRESS><A HREF=\"http://info.cern.ch/hypertext/WWW/Daemon/User",
"/Guide.html\">\nCERN httpd ",
HTAppVersion,