# HG changeset patch # User Kim Alvefur # Date 1527429065 -7200 # Node ID 7c55f05327a236ebb79c2d6a38b5a7f32bc1a6bd # Parent d0db28768980856a0ee5fa64aca509b5a42b9fc4 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. diff -r d0db28768980 -r 7c55f05327a2 mod_pubsub_feeds/mod_pubsub_feeds.lua --- 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