diff --git a/index.js b/index.js index 8848294d..3577984e 100644 --- a/index.js +++ b/index.js @@ -135,6 +135,14 @@ function compression(options) { return } + // Don't compress for Cache-Control: no-transform + // https://tools.ietf.org/html/rfc7234#section-5.2.1.6 + var cacheControl = res.getHeader('Cache-Control') || '' + if (cacheControl.match(/\bno-transform\b/)) { + nocompress('no-transform') + return + } + // vary vary(res, 'Accept-Encoding') diff --git a/test/compression.js b/test/compression.js index 1efd4334..c60b500e 100644 --- a/test/compression.js +++ b/test/compression.js @@ -20,6 +20,20 @@ describe('compression()', function(){ .expect(200, done) }) + it('should skip Cache-Control: no-transform', function(done){ + var server = createServer({ threshold: 0 }, function (req, res) { + res.setHeader('Content-Type', 'text/plain') + res.setHeader('Cache-Control', 'no-transform') + res.end('hello, world') + }) + + request(server) + .get('/') + .set('Accept-Encoding', 'gzip') + .expect(shouldNotHaveHeader('Content-Encoding')) + .expect(200, done) + }) + it('should skip unknown accept-encoding', function(done){ var server = createServer({ threshold: 0 }, function (req, res) { res.setHeader('Content-Type', 'text/plain')