diff --git a/tests/test_handlers.py b/tests/test_handlers.py index b4f94999e..74fec046f 100644 --- a/tests/test_handlers.py +++ b/tests/test_handlers.py @@ -16,6 +16,7 @@ from PIL import Image from tornado.testing import AsyncHTTPTestCase +from tornado.options import options from thumbor.app import ThumborServiceApp @@ -41,6 +42,16 @@ def test_returns_success_status_code(self): response = self.wait(timeout=20) self.assertEqual(200, response.code) + def test_returns_cache_control_header(self): + options.MAX_AGE = 3600 + self.http_client.fetch(self.get_url('/unsafe/meta/s.glbimg.com/es/ge/f/original/2011/03/22/boavista_x_botafogo.jpg'), self.stop) + response = self.wait() + d = datetime.datetime.now() + datetime.timedelta(seconds=3600) + + assert response.code == 200 + self.assertEqual("max-age=3600,public", response.headers['Cache-Control'] ) + self.assertEqual(d, datetime.strptime(response.headers['Cache-Control'],"%a, %d %b %Y %H:%M:00 GMT")) + class ImageTestCase(AsyncHTTPTestCase): def get_app(self): diff --git a/thumbor/config.py b/thumbor/config.py index f6c639d56..3c1ef8d28 100644 --- a/thumbor/config.py +++ b/thumbor/config.py @@ -15,6 +15,7 @@ define('MAX_WIDTH', type=int, default=0) define('MAX_HEIGHT', type=int, default=0) +define('MAX_AGE',type=int, default=0) define('ALLOWED_SOURCES', default=[], multiple=True) define('QUALITY', type=int, default=80) diff --git a/thumbor/handlers/__init__.py b/thumbor/handlers/__init__.py index 4660db360..19f8f85c9 100644 --- a/thumbor/handlers/__init__.py +++ b/thumbor/handlers/__init__.py @@ -12,6 +12,7 @@ from os.path import splitext import tornado.web +import datetime from tornado.options import options from thumbor.transformer import Transformer @@ -190,6 +191,10 @@ def finish_request(self, context): self.set_header('Content-Type', content_type) + if options.MAX_AGE: + self.set_header('Cache-Control', 'max-age=' + str(options.MAX_AGE) + ',public') + self.set_header('Expires', datetime.datetime.utcnow() + datetime.timedelta(seconds=options.MAX_AGE)) + results = context['engine'].read(context['extension'], context['quality']) self.write(results)