From e7242ce77332b4f59e02daf88b7f3ef504ff470f Mon Sep 17 00:00:00 2001 From: jomo Date: Wed, 20 Jan 2016 01:50:30 +0100 Subject: [PATCH] respond 304 on server error, fixes #135 --- lib/response.js | 3 ++- test/test.js | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/response.js b/lib/response.js index fbaf8f2..67fad3c 100644 --- a/lib/response.js +++ b/lib/response.js @@ -68,7 +68,8 @@ module.exports = function(request, response, result) { // handle etag caching var incoming_etag = request.headers["if-none-match"]; - if (incoming_etag && incoming_etag === etag) { + // also respond with 304 on server error (use client's version) + if (incoming_etag && (incoming_etag === etag || result.status === -1)) { response.writeHead(304, headers); response.end(); return; diff --git a/test/test.js b/test/test.js index d8ae20c..1aafe71 100644 --- a/test/test.js +++ b/test/test.js @@ -791,6 +791,18 @@ describe("Crafatar", function() { }); }); + it("should return 304 on server error", function(done) { + var original_timeout = config.server.http_timeout; + config.server.http_timeout = 1; + request.get({url: "http://localhost:3000/avatars/whatever", headers: {"If-None-Match": '"some-etag"'}}, function(error, res, body) { + assert.ifError(error); + assert.ifError(body); + assert.strictEqual(res.statusCode, 304); + config.server.http_timeout = original_timeout; + done(); + }); + }); + it("should return a 422 (invalid size)", function(done) { var size = config.avatars.max_size + 1; request.get("http://localhost:3000/avatars/Jake_0?size=" + size, function(error, res, body) {