[4.1] 194acd4 Allow VCL set Last-Modified to be used for I-M-S processing.
PÃ¥l Hermunn Johansen
hermunn at varnish-software.com
Thu Jun 9 16:34:07 CEST 2016
commit 194acd4f0a9e0483b8ae82ad58ed726129cd03eb
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 cb089cf..650bcf5 100644
--- a/bin/varnishd/cache/cache_rfc2616.c
+++ b/bin/varnishd/cache/cache_rfc2616.c
@@ -254,7 +254,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;
/*
@@ -274,6 +274,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