[master] 7996af0 Allow VCL set Last-Modified to be used for I-M-S processing.
Poul-Henning Kamp
phk at FreeBSD.org
Wed May 18 09:05:08 CEST 2016
commit 7996af0271325027b750c1f31318927edbafaa8d
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Wed May 18 07:03:30 2016 +0000
Allow VCL set Last-Modified to be used for I-M-S processing.
Submitted by: rezan
Fixes: #1931
diff --git a/bin/varnishd/cache/cache_rfc2616.c b/bin/varnishd/cache/cache_rfc2616.c
index 6b80371..884aad1 100644
--- a/bin/varnishd/cache/cache_rfc2616.c
+++ b/bin/varnishd/cache/cache_rfc2616.c
@@ -256,7 +256,7 @@ rfc2616_weak_compare(const char *p, const char *e)
int
RFC2616_Do_Cond(const struct req *req)
{
- const char *p, *e;
+ const char *p, *e, *l;
double ims, lm;
/*
@@ -276,6 +276,12 @@ RFC2616_Do_Cond(const struct req *req)
ims = VTIM_parse(p);
if (!ims || ims > req->t_req) /* [RFC7232 3.3 p16] */
return (0);
+ if (http_GetHdr(req->resp, H_Last_Modified, &l)) {
+ lm = VTIM_parse(l);
+ if (!lm || lm > ims)
+ return (0);
+ return (1);
+ }
AZ(ObjGetDouble(req->wrk, req->objcore, OA_LASTMODIFIED, &lm));
if (lm > ims)
return (0);
diff --git a/bin/varnishtest/tests/v00047.vtc b/bin/varnishtest/tests/v00047.vtc
new file mode 100644
index 0000000..9ca2a6c
--- /dev/null
+++ b/bin/varnishtest/tests/v00047.vtc
@@ -0,0 +1,40 @@
+varnishtest "Changing Last Modified in vcl_deliver"
+
+server s1 {
+ rxreq
+ txresp -hdr "Last-Modified: Wed, 27 Apr 2016 14:00:00 GMT"
+} -start
+
+varnish v1 -vcl+backend {
+ sub vcl_deliver {
+ if (req.http.deliver == "modify") {
+ set resp.http.Last-Modified = "Wed, 27 Apr 2016 16:00:00 GMT";
+ }
+ }
+} -start
+
+client c1 {
+ txreq
+ rxresp
+ expect resp.status == 200
+
+ txreq -hdr "If-Modified-Since: Wed, 27 Apr 2016 14:00:00 GMT"
+ rxresp
+ expect resp.status == 304
+
+ txreq -hdr "If-Modified-Since: Wed, 27 Apr 2016 12:00:00 GMT"
+ rxresp
+ expect resp.status == 200
+
+ txreq -hdr "If-Modified-Since: Wed, 27 Apr 2016 14:00:00 GMT" -hdr "deliver: modify"
+ rxresp
+ expect resp.status == 200
+
+ txreq -hdr "If-Modified-Since: Wed, 27 Apr 2016 16:00:00 GMT" -hdr "deliver: modify"
+ rxresp
+ expect resp.status == 304
+
+ txreq -hdr "If-Modified-Since: Wed, 27 Apr 2016 18:00:00 GMT" -hdr "deliver: modify"
+ rxresp
+ expect resp.status == 304
+} -run
More information about the varnish-commit
mailing list