changeset 3047:7c55f05327a2

mod_pubsub_feeds: Use ETag instead of problematic If-Modified-Since Because it set If-Modified-Since to the last poll time instead of the exact value of Last-Modified in the last response, it would not work with some HTTP servers.
author Kim Alvefur <zash@zash.se>
date Sun, 27 May 2018 15:51:05 +0200
parents d0db28768980
children 4e8f73402577
files mod_pubsub_feeds/mod_pubsub_feeds.lua
diffstat 1 files changed, 7 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/mod_pubsub_feeds/mod_pubsub_feeds.lua	Sat May 26 10:58:06 2018 +0200
+++ b/mod_pubsub_feeds/mod_pubsub_feeds.lua	Sun May 27 15:51:05 2018 +0200
@@ -15,7 +15,7 @@
 
 local pubsub = module:depends"pubsub";
 
-local date, time = os.date, os.time;
+local time = os.time;
 local dt_parse, dt_datetime = require "util.datetime".parse, require "util.datetime".datetime;
 local uuid = require "util.uuid".generate;
 local hmac_sha1 = require "util.hashes".hmac_sha1;
@@ -147,14 +147,17 @@
 
 function fetch(item, callback) -- HTTP Pull
 	local headers = { };
-	if item.data and item.last_update then
-		headers["If-Modified-Since"] = date("!%a, %d %b %Y %H:%M:%S %Z", item.last_update);
+	if item.data and item.etag then
+		headers["If-None-Match"] = item.etag;
 	end
-	http.request(item.url, { headers = headers }, function(data, code)
+	http.request(item.url, { headers = headers }, function(data, code, resp)
 		if code == 200 then
 			item.data = data;
 			if callback then callback(item) end
 			item.last_update = time();
+			if resp.headers then
+				item.etag = resp.headers.etag
+			end
 		elseif code == 304 then
 			item.last_update = time();
 		end