[interchange] Add new pragma cache_control to set HTTP Cache-Control response header

Jon Jensen interchange-cvs at icdevgroup.org
Sat Apr 2 19:18:33 UTC 2011


commit c1d6b1ff04fbf22c7943eda845f9ca35c571ff73
Author: Jon Jensen <jon at endpoint.com>
Date:   Mon Mar 28 15:37:53 2011 -0500

    Add new pragma cache_control to set HTTP Cache-Control response header
    
    Can be used in a page like this:
    
    [tag pragma cache_control]max-age=600[/tag]
    
    That will send this response header:
    
    Cache-Control: max-age=600
    
    Which will tell upstream proxies and browsers to cache the page for 10 minutes.

 lib/Vend/Server.pm |   35 ++++++++++++++++++++++++++++-------
 1 files changed, 28 insertions(+), 7 deletions(-)
---
diff --git a/lib/Vend/Server.pm b/lib/Vend/Server.pm
index 66f0caf..7305cec 100644
--- a/lib/Vend/Server.pm
+++ b/lib/Vend/Server.pm
@@ -564,6 +564,25 @@ sub canon_status {
 	return "$_\r\n";
 }
 
+sub get_cache_headers {
+	my @headers;
+
+	my $cc = $::Pragma->{cache_control};
+	push @headers, "Cache-Control: $cc" if $cc;
+
+	push @headers, "Pragma: no-cache" if delete $::Scratch->{mv_no_cache};
+
+	return @headers;
+}
+
+sub add_cache_headers {
+	return unless my @headers = get_cache_headers();
+
+	$Vend::StatusLine .= "\r\n" unless $Vend::StatusLine =~ /\n\z/;
+	$Vend::StatusLine .= "$_\r\n" for @headers;
+	return 1;
+}
+
 sub respond {
 	# $body is now a reference
 	my ($s, $body) = @_;
@@ -625,8 +644,9 @@ sub respond {
 		$Vend::StatusLine .= "X-Track: " . $Vend::Track->header() . "\r\n"
 			if $Vend::Track and $Vend::Cfg->{UserTrack};
 # END TRACK
-		$Vend::StatusLine .= "Pragma: no-cache\r\n"
-			if delete $::Scratch->{mv_no_cache};
+
+		add_cache_headers();
+
 		print MESSAGE canon_status($Vend::StatusLine);
 		print MESSAGE "\r\n";
 		print MESSAGE $$body;
@@ -674,9 +694,10 @@ sub respond {
 		select $save;
 		$Vend::StatusLine .= "\r\nX-Track: " . $Vend::Track->header() . "\r\n"
 			if $Vend::Track and $Vend::Cfg->{UserTrack};
-# END TRACK                            
-		$Vend::StatusLine .= "Pragma: no-cache\r\n"
-			if delete $::Scratch->{mv_no_cache};
+# END TRACK
+
+		add_cache_headers();
+
 		$status = '200 OK' if ! $status;
 		if(defined $Vend::StatusLine) {
 			$Vend::StatusLine = "HTTP/1.0 $status\r\n$Vend::StatusLine"
@@ -744,8 +765,8 @@ sub respond {
 			if $Vend::Track and $Vend::Cfg->{UserTrack};
 # END TRACK
 	}
-	print $fh canon_status("Pragma: no-cache")
-		if delete $::Scratch->{mv_no_cache};
+
+	print $fh canon_status($_) for get_cache_headers();
 
 	print $fh "\r\n";
 	print $fh $$body;



More information about the interchange-cvs mailing list