summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--module/web/http.scm12
-rw-r--r--test-suite/tests/web-http.test2
2 files changed, 11 insertions, 3 deletions
diff --git a/module/web/http.scm b/module/web/http.scm
index dc742a14c..20ea2aa6b 100644
--- a/module/web/http.scm
+++ b/module/web/http.scm
@@ -1240,19 +1240,25 @@ phrase\"."
(declare-key-value-list-header! "Cache-Control"
(lambda (k v-str)
(case k
- ((max-age max-stale min-fresh s-maxage)
+ ((max-age min-fresh s-maxage)
(parse-non-negative-integer v-str))
+ ((max-stale)
+ (and v-str (parse-non-negative-integer v-str)))
((private no-cache)
(and v-str (split-header-names v-str)))
(else v-str)))
(lambda (k v)
(case k
- ((max-age max-stale min-fresh s-maxage)
+ ((max-age min-fresh s-maxage)
(non-negative-integer? v))
+ ((max-stale)
+ (or (not v) (non-negative-integer? v)))
((private no-cache)
(or (not v) (list-of-header-names? v)))
+ ((no-store no-transform only-if-cache must-revalidate proxy-revalidate)
+ (not v))
(else
- (not v))))
+ (or (not v) (string? v)))))
(lambda (k v port)
(cond
((string? v) (display v port))
diff --git a/test-suite/tests/web-http.test b/test-suite/tests/web-http.test
index b6abbf370..b5247ab5c 100644
--- a/test-suite/tests/web-http.test
+++ b/test-suite/tests/web-http.test
@@ -83,6 +83,8 @@
'((private . (foo))))
(pass-if-parse cache-control "no-cache,max-age=10"
'(no-cache (max-age . 10)))
+ (pass-if-parse cache-control "max-stale" '(max-stale))
+ (pass-if-parse cache-control "max-stale=10" '((max-stale . 10)))
(pass-if-parse connection "close" '(close))
(pass-if-parse connection "Content-Encoding" '(content-encoding))