ProxyPass, caching and If-Modified-Since
am 23.05.2002 16:56:40 von Daniel Barlow
I'm looking at proxy_http.c in 1.3.24, and wondering what would happen
if it added If-Modified-Since headers to any requests it does for
which it has a cached response already, using the Last-Modified time
of the cached response.
Why do I want to? I have mod_proxy configured with ProxyPass and
ProxyPassReverse to front an application server, some of the responses
from which are quite computation-intensive and thus slow. The
application server correctly sets Last-Modified and handles
conditional GETs, which saves some time when the same client requests
the page twice, but doesn't help if two different clients request the
same page.
Does this make sense? I'm wondering whether (a) it breaks HTTP, (b)
it breaks some well-known client/origin server, (c) nobody else is
weird enough to need it, or (d) it's dumb for some other reason? I
have a passing familiarity with HTTP, but I'm not exactly a domain
expert.
-dan
--
http://ww.telent.net/cliki/ - Link farm for free CL-on-Unix resources
Re: ProxyPass, caching and If-Modified-Since
am 24.05.2002 09:59:16 von Graham Leggett
This is a cryptographically signed message in MIME format.
--------------msFF5B436179C2B9F218011DE1
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Daniel Barlow wrote:
> I'm looking at proxy_http.c in 1.3.24, and wondering what would happen
> if it added If-Modified-Since headers to any requests it does for
> which it has a cached response already, using the Last-Modified time
> of the cached response.
>
> Why do I want to? I have mod_proxy configured with ProxyPass and
> ProxyPassReverse to front an application server, some of the responses
> from which are quite computation-intensive and thus slow. The
> application server correctly sets Last-Modified and handles
> conditional GETs, which saves some time when the same client requests
> the page twice, but doesn't help if two different clients request the
> same page.
It should make no difference whether the two requests come from the same
or different clients, as each request is independant within itself. In
theory any HTTP compliant proxy should do what you want it to do
already.
Keep in mind though that a far better way of solving your problem is to
make sure that your application server generates ETag headers in the
responses. An ETag is a unique identifier attached to an object which
can be used in an If-None-Match conditional request. See RFC2616 and
look up the ETag header, the If-None-Match header for a full explanation
of how this mechanism works in HTTP/1.1.
In the simplest solution (as I understand it), you could get away with
adding a random ETag to each response (implying that every response is
different from the last one) and then specifying "Cache-Control:
max-age=3600". This means "dear cache, I would like you to cache this
response and consider it fresh for 3600 seconds, and only after that
contact me again to check if the page is up to date, unless any other
Cache-Control headers dictate you should do otherwise".
In your application however, you support conditional gets. Thus you
should return the same Etag with each request with the same data. ie, if
you change the data in any way, change the ETag attached to the request.
(Hopefully I haven;t confused you more, full details are in RFC2616).
Regards,
Graham
--
-----------------------------------------
minfrin@sharp.fm "There's a moon
over Bourbon Street
tonight..."
--------------msFF5B436179C2B9F218011DE1
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature
MIIIAAYJKoZIhvcNAQcCoIIH8TCCB+0CAQExCzAJBgUrDgMCGgUAMAsGCSqG SIb3DQEHAaCC
Bf4wggLNMIICNqADAgECAgMHh88wDQYJKoZIhvcNAQEEBQAwgZIxCzAJBgNV BAYTAlpBMRUw
EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEPMA0G A1UEChMGVGhh
d3RlMR0wGwYDVQQLExRDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEoMCYGA1UEAxMf UGVyc29uYWwg
RnJlZW1haWwgUlNBIDIwMDAuOC4zMDAeFw0wMjA1MjMxMzQzMDVaFw0wMzA1 MjMxMzQzMDVa
MIGAMRAwDgYDVQQEEwdMZWdnZXR0MQ8wDQYDVQQqEwZHcmFoYW0xFzAVBgNV BAMTDkdyYWhh
bSBMZWdnZXR0MR8wHQYJKoZIhvcNAQkBFhBtaW5mcmluQHNoYXJwLmZtMSEw HwYJKoZIhvcN
AQkBFhJtaW5mcmluQGFwYWNoZS5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0A MIGJAoGBAMu6
SGJLfqv2lRy+TAhi2K5KhF70x9RHqyptGfCBVgwOdRKcAfpmo8R9aqEjc829 cKBwrkiA5QHW
mTK9vXMtQ1kAwsK0woyFLN2dpvCqhxgUTYm7rKFJjMrISzuXnJT5y1R7zMgV bznUny0MQPWE
KtelO6UHV7gVHMIIUvKg+OSvAgMBAAGjQTA/MC8GA1UdEQQoMCaBEG1pbmZy aW5Ac2hhcnAu
Zm2BEm1pbmZyaW5AYXBhY2hlLm9yZzAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3 DQEBBAUAA4GB
AFbZLPzEpllc/6aauUsRn99MbY0gvH33joBceImKaeVc+eQzZfMcCMDEUpnP VXbbqUlm4SEQ
/7miUpq2+mSQHGqYHtem3xj3G8PEkq+4U8zo7pHZuRmgKLZjx3j+tyhHMh7h 5zv8Cc/Lg1/p
BAhtdSCl0glh091g1HAQk6gGgJqxMIIDKTCCApKgAwIBAgIBDDANBgkqhkiG 9w0BAQQFADCB
0TELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UE BxMJQ2FwZSBU
b3duMRowGAYDVQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2Vy dGlmaWNhdGlv
biBTZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFs IEZyZWVtYWls
IENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu Y29tMB4XDTAw
MDgzMDAwMDAwMFoXDTAyMDgyOTIzNTk1OVowgZIxCzAJBgNVBAYTAlpBMRUw EwYDVQQIEwxX
ZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEPMA0GA1UEChMGVGhh d3RlMR0wGwYD
VQQLExRDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEoMCYGA1UEAxMfUGVyc29uYWwg RnJlZW1haWwg
UlNBIDIwMDAuOC4zMDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA3jMy pmPHCSVFPtJu
eCdngcXaiBmClw7jRCmKYzUqbXA8+tyu9+50bzC8M5B/+TRxoKNtmPHDT6Jl 2w36S/HW3WGl
+YXNVZo1Gp2Sdagnrthy+boC9tewkd4c6avgGAOofENCUFGHgzzwObSbVIoT h/+zm51JZgAt
CYnslGvpoWkCAwEAAaNOMEwwKQYDVR0RBCIwIKQeMBwxGjAYBgNVBAMTEVBy aXZhdGVMYWJl
bDEtMjk3MBIGA1UdEwEB/wQIMAYBAf8CAQAwCwYDVR0PBAQDAgEGMA0GCSqG SIb3DQEBBAUA
A4GBAHMbbyZli/8VNEtZYortRL5Jx+gNu4+5DWomKmKEH7iHY3QcbbfPGlOR S+HN5jjZ7VD0
Omw0kqzmkpxuwSMBwgmn70uuct0GZ/VQby5YuLYLwVBXtewc1+8XttWIm7ei iBrtOVs5fTT8
tpYYJU1q9J3Fw5EvqZa4BTxS/N3pYgNIMYIByjCCAcYCAQEwgZowgZIxCzAJ BgNVBAYTAlpB
MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEP MA0GA1UEChMG
VGhhd3RlMR0wGwYDVQQLExRDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEoMCYGA1UE AxMfUGVyc29u
YWwgRnJlZW1haWwgUlNBIDIwMDAuOC4zMAIDB4fPMAkGBSsOAwIaBQCggYYw GAYJKoZIhvcN
AQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMDIwNTI0MDc1OTIw WjAjBgkqhkiG
9w0BCQQxFgQUJynbHIUT9RVUgmOpzCIBHsUYhpwwJwYJKoZIhvcNAQkPMRow GDAHBgUrDgMC
BzANBggqhkiG9w0DAgIBKDANBgkqhkiG9w0BAQEFAASBgGJcGXIF8Nu04iQD 7Tulwoovm41k
uVn/Rb+D4tbfBuRoBel9lu8W8nKb8TKbxlb/RaHd61NFJarOhi7FMFSyDT71 sO4XSnkY/0IB
j9ORBZXCmFF87HFWGGDf4Acu2FynB2irxsCnQJFyunvGQASlPntnuq0lIeqr yyrtbeSqwxtb
--------------msFF5B436179C2B9F218011DE1--