summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Benkard <code@mail.matthias.benkard.de>2009-10-07 12:16:35 +0200
committerMatthias Benkard <code@mail.matthias.benkard.de>2009-10-07 12:16:35 +0200
commit0161b4b655e549d57fef122cabae5d4e380a4e95 (patch)
treeb7286abc28ab2aeab805341abc7aa472688ac0db
parentb388b7c6921d9661b474b7acd1a3ea5748bfeb37 (diff)
Implement sane caching behaviour.
Ignore-this: 8ed0815613cb44c0eee9d8ac47e1753b darcs-hash:e41ff965d8172b7979369cb0df98302f29a9a9c4
-rw-r--r--globals.lisp4
-rwxr-xr-xjournal.lisp2
-rw-r--r--main.lisp2
-rw-r--r--mulk-journal.asd2
-rw-r--r--utils.lisp10
5 files changed, 19 insertions, 1 deletions
diff --git a/globals.lisp b/globals.lisp
index a609e63..1637931 100644
--- a/globals.lisp
+++ b/globals.lisp
@@ -76,3 +76,7 @@
"Warnings that should be displayed to the user.")
(defparameter *full-entry-view* t)
+
+(defparameter *site-root* nil)
+(defparameter *if-modified-since* nil)
+
diff --git a/journal.lisp b/journal.lisp
index cfac6fd..f1fd5b1 100755
--- a/journal.lisp
+++ b/journal.lisp
@@ -346,6 +346,7 @@
;;
;; (http-add-header "Last-Modified" (http-timestamp (compute-journal-last-modified-date)))
(http-add-header "Content-Language" "de")
+ (http-add-header "Cache-Control" "public")
(http-send-headers "text/html; charset=UTF-8")
(<xhtml :xmlns "http://www.w3.org/1999/xhtml"
@@ -409,6 +410,7 @@
(defun show-web-journal ()
#.(locally-enable-sql-reader-syntax)
+ (revalidate-cache-or-die)
(with-web-journal ((if (member *action* '(:view :edit :preview :post-comment
:save-entry))
(title-of (find-entry *post-number*))
diff --git a/main.lisp b/main.lisp
index ae2c0cb..c8b489e 100644
--- a/main.lisp
+++ b/main.lisp
@@ -54,6 +54,8 @@
(*post-number* :view)
(t nil))))
(*method* (keywordify (gethash "REQUEST_METHOD" *http-env*)))
+ (*if-modified-since* #+clisp (ext:getenv "HTTP_IF_MODIFIED_SINCE")
+ #-clisp nil)
(*script-filename* (pathname-as-file
(or (gethash "SCRIPT_FILENAME" *http-env*)
"/home/mulk/Dokumente/Projekte/Mulkblog/journal.cgi")))
diff --git a/mulk-journal.asd b/mulk-journal.asd
index 6cd1da5..49a1e12 100644
--- a/mulk-journal.asd
+++ b/mulk-journal.asd
@@ -26,7 +26,7 @@
:depends-on (#:cl-ppcre #:cl-fad #:iterate #:cl-markdown #:parenscript
#:yaclml #:lisp-cgi-utils #:alexandria #:xml-emitter
#:split-sequence #:clsql #:clsql-uffi #:clsql-sqlite3
- #:drakma)
+ #:drakma #:cybertiggyr-time)
:components ((:file "defpackage")
(:file "macros")
(:file "globals")
diff --git a/utils.lisp b/utils.lisp
index 74030b8..590d310 100644
--- a/utils.lisp
+++ b/utils.lisp
@@ -325,3 +325,13 @@ ELEMENT-TYPE as the stream's."
(submitter-user-agent comment)
(spamp comment)
(body-of comment))))
+
+(defun revalidate-cache-or-die ()
+ #+clisp
+ (let ((time (cybertiggyr-time:parse-time *if-modified-since*)))
+ (when (and (integerp time) (>= *if-modified-since* (compute-journal-last-modified-date)))
+ (http-add-header "Status: 304 Not Modified")
+ (http-send-headers)
+ (ext:quit 0)))
+ #-clisp
+ nil)