Folks,
I thoroughly support this patch (as an Options flag or as a stand-alone
indicator) for 1.3.20. I'm +1 on (finally) extending the Options byte, but
+1 on the alternative since folks object.
Rodent: Extending Options has been nixed in the past [no opinion]
Joshua: Options is already overloaded, confusing [a -.5, perhaps?]
Marc: Options is depreciated NCSA compatibility cruft
Phil, I can't find your original patch (sans Options.) I'd suggest the
directive ETagIdentity flag (on or off, default of on for most platforms,
perhaps an IFDEF for win32/os2 to off.)
Bill
----- Original Message -----
From: "Dietz, Phil E." <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, February 26, 2001 3:44 PM
Subject: [RFC] InodeEtag option
> OK, I converted my ETag patch to use Options. Of note:
>
> - the allow_options_t size increased to a long because all 8 bits of char
> were in use.
> - if InodeEtag is not present in Options, it uses inodes like the current
> behaviour.
> - the patch below is beta and against version 1.3.17. Newer ones against
> 1.3.19 to follow.
>
> I will test with Insure later this week.
> Phil Dietz
>
> Patch Version 1.0:
>
> --- ../apache_1.3.17/src/main/http_protocol.c Thu Jan 18 07:25:07 2001
> +++ src/main/http_protocol.c Mon Feb 26 11:56:23 2001
> @@ -656,16 +656,30 @@
> * we send a weak tag instead of a strong one, since it could
> * be modified again later in the second, and the validation
> * would be incorrect.
> + *
> + * The use of the inode is controlled with the InodeEtag Option.
> + * Disabling allows browser-side cacheing (304s) to happen more often
> + * when serving default_handler objects from web farms with > 1 unit.
> */
>
> weak = ((r->request_time - r->mtime > 1) && !force_weak) ? "" : "W/";
>
> if (r->finfo.st_mode != 0) {
> - etag = ap_psprintf(r->pool,
> +
> + if (ap_allow_options(r) & OPT_INODE_ETAG) {
> + etag = ap_psprintf(r->pool,
> "%s\"%lx-%lx-%lx\"", weak,
> (unsigned long) r->finfo.st_ino,
> (unsigned long) r->finfo.st_size,
> (unsigned long) r->mtime);
> + }
> + else {
> + etag = ap_psprintf(r->pool,
> + "%s\"%lx-%lx\"", weak,
> + (unsigned long) r->finfo.st_size,
> + (unsigned long) r->mtime);
> + }
> +
> }
> else {
> etag = ap_psprintf(r->pool, "%s\"%lx\"", weak,
>
>
> --- ../apache_1.3.17/src/main/http_core.c Mon Jan 15 12:04:57 2001
> +++ src/main/http_core.c Mon Feb 26 14:28:40 2001
> @@ -1298,6 +1298,9 @@
> else if (!strcasecmp(w, "RunScripts")) { /* AI backcompat. Yuck */
> opt = OPT_MULTI|OPT_EXECCGI;
> }
> + else if (!strcasecmp(w, "InodeEtag")) {
> + opt = OPT_INODE_ETAG;
> + }
> else if (!strcasecmp(w, "None")) {
> opt = OPT_NONE;
> }
>
> --- ../apache_1.3.17/src/include/http_core.h Mon Jan 15 12:04:33 2001
> +++ src/include/http_core.h Mon Feb 26 14:43:18 2001
> @@ -84,7 +84,8 @@
> #define OPT_INCNOEXEC 32
> #define OPT_SYM_OWNER 64
> #define OPT_MULTI 128
> -#define OPT_ALL (OPT_INDEXES|OPT_INCLUDES|OPT_SYM_LINKS|OPT_EXECCGI)
> +#define OPT_INODE_ETAG 256
> +#define OPT_ALL
> (OPT_INDEXES|OPT_INCLUDES|OPT_SYM_LINKS|OPT_EXECCGI|OPT_INODE_ETAG)
>
> /* options for get_remote_host() */
> /* REMOTE_HOST returns the hostname, or NULL if the hostname
> @@ -178,7 +179,7 @@
>
> /* Per-directory configuration */
>
> -typedef unsigned char allow_options_t;
> +typedef unsigned long allow_options_t;
> typedef unsigned char overrides_t;
>
> typedef struct {
>
>