implements ETag caching for items.php and news.php
authorarno <arenevier@fdn.fr>
Fri, 7 Aug 2009 21:49:54 +0000 (23:49 +0200)
committerarno <arenevier@fdn.fr>
Sat, 8 Aug 2009 10:55:00 +0000 (12:55 +0200)
items.php
news.php

index c36318379964d0790564a47587ccf7b4416ef27a..e7a97231572a689dc0d4185706e66d2a7aab7b33 100644 (file)
--- a/items.php
+++ b/items.php
@@ -6,9 +6,22 @@ require_once ("./inc/settings.php");
 require_once ("./inc/utils.php");
 require_once ("./inc/db/mysql.php");
 
-function main ($features) {
+function headers_callback ($output) {
+    $etag = md5 ($output);
+    if ((isset ($_SERVER ["HTTP_IF_NONE_MATCH"])) && 
+         ($_SERVER ["HTTP_IF_NONE_MATCH"] == $etag)) {
+         header ("HTTP/1.1 304 Not Modified");
+         exit ();
+    }
 
-    header ("Cache-control: no-cache");
+    header ("Content-type: application/vnd.google-earth.kml+xml");
+    header ("Cache-control: must-revalidate");
+    header (sprintf ("ETag: %s", $etag));
+
+    return $output;
+}
+
+function main ($features) {
 
     echo '<?xml version="1.0" encoding="UTF-8"?>
 <kml xmlns="http://www.opengis.net/kml/2.2">
@@ -70,6 +83,8 @@ try {
 } catch (Exception $e) {
     exit ("server error");
 }
-header ("Content-type: application/vnd.google-earth.kml+xml");
+
+ob_start ("headers_callback");
 main ($features);
+ob_end_flush ()
 ?>
index b729bb7f046f955844ea7100302214d29f8b406b..6eb78e63efe9e10ff3258fb9c7f3407d4b8b59bb 100644 (file)
--- a/news.php
+++ b/news.php
@@ -6,8 +6,20 @@ require_once ("./inc/settings.php");
 require_once ("./inc/db/mysql.php");
 require_once ("./inc/utils.php");
 
-header ("Content-type: application/atom+xml; charset=UTF-8");
-header("Cache-control: no-cache");
+function headers_callback ($output) {
+    $etag = md5 ($output);
+    if ((isset ($_SERVER ["HTTP_IF_NONE_MATCH"])) && 
+         ($_SERVER ["HTTP_IF_NONE_MATCH"] == $etag)) {
+         header ("HTTP/1.1 304 Not Modified");
+         exit ();
+    }
+
+    header ("Content-type: application/atom+xml; charset=UTF-8");
+    header ("Cache-control: must-revalidate");
+    header (sprintf ("ETag: %s", $etag));
+
+    return $output;
+}
 
 function date3339 ($feature) {
     $date = date ('Y-m-d\TH:i:s', $feature->date);
@@ -118,5 +130,8 @@ try {
 } catch (Exception $e) {
     exit ("server error");
 }
+
+ob_start ("headers_callback");
 main ($features);
+ob_end_flush ()
 ?>