You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Paul Rhodes <pa...@yahoo.co.uk> on 2005/08/12 19:27:46 UTC
mod_headers: changes to support direct HTTP header mapping (+Vary)
Hi,
I've been using mod_headers extensively for a number of years to modify
headers from as they enter and exit the network. We use apache as a
front end to our appservers and we get requests from multiple sources so
we often have issues with header translation. This means we have to do
something like this:
RewriteCond %{HTTP:INPUTHEADER1} ([0-9]+)
RewriteRule (.*) $1 [E=HEADER:%1]
RewriteCond %{HTTP:INPUTHEADER2} ([0-9]+)
RewriteCond %{ENV:HEADER} (.+)
RewriteRule (.*) $1 [E=HEADER:%1]
RewriteCond %{ENV:HEADER} (.+)
RewriteRule (.*) $1 [E=HEADER:"default"]
RequestHeader set OUTPUTHEADER %{HEADER}e env=HEADER
This has worked kind of ok until now, but we are now looking at caching
issues and wish to ensure that the corresponding Vary is mapped. This
makes the situation somewhat more complicated and I don't think it's
really possible to continue doing this via rewrite rules.
I've looked at mod_headers and have started implementing a patch. The
patch provides the following functionality:
Header|RequestHeader default <Header> <Value>
The header <Header> is only set if <Header> does not already exist.
Header|RequestHeader copy <New-Header> <Original-Header>
This will copy the value of <Original-Header> to <New-Header> if and
only if <New-Header> is not already present.
Header|RequestHeader rename <New-Header> <Original-Header>
This will copy the value of <Original-Header> to <New-Header> if and
only if <New-Header> is not already present. In addition to this it will
remove <Original-Header>.
The combination of the above will allow me to put something like the
following..
RequestHeader rename OUTPUTHEADER INPUTHEADER1
RequestHeader rename OUTPUTHEADER INPUTHEADER2
RequestHeader default "default"
This is obviously neater, but the main reason to do this is to have an
explicit link between the headers so that when a response comes back,
the Vary can be catered for. So if 'Vary: OUTPUTHEADER' is sent back
from the appserver, apache can convert this to 'Vary: INPUTHEADER1' or
'Vary: INPUTHEADER2' as appropriate.
Ok. That is a lot of background, but my question is what is the best way
to track which of the translations took place? I was trying to avoid
bodging it with setting an environment variable or using notes. Is there
somewhere within the datastructures where I can keep track of which
rules fired?
Also, I have made an effort to genericise this implementation so it fits
logically on top of mod_headers. Is there any possibility that such a
patch might be commited for mod_headers?
thanks in advance,
Paul