浏览代码

Add brotli decompression to redownload.js

Gaël Métais 4 年之前
父节点
当前提交
bafea756ee
共有 1 个文件被更改,包括 24 次插入2 次删除
  1. 24 2
      lib/tools/redownload/redownload.js

+ 24 - 2
lib/tools/redownload/redownload.js

@@ -704,10 +704,10 @@ var Redownload = function() {
 
         debug('Downloading %s', entry.url);
 
-        // Always add gzip and webp headers before sending, in case the server listens to them
+        // Always add compression and webp headers before sending, in case the server listens to them
         var reqHeaders = [];
         reqHeaders['Accept'] = '*/*,image/webp';
-        reqHeaders['Accept-Encoding'] = 'gzip, deflate';
+        reqHeaders['Accept-Encoding'] = 'gzip, deflate, br';
         reqHeaders['Connection'] = 'keep-alive';
 
         var requestOptions = {
@@ -836,6 +836,28 @@ var Redownload = function() {
                             bodySize += data.length;
                         }).pipe(deflate);
 
+                        break;
+                    case 'br':
+
+                        var brotli = zlib.createBrotliDecompress();
+
+                        brotli.on('data', function (data) {
+
+                            bodyChunks.push(data);
+                            uncompressedSize += data.length;
+                        }).on('end', function () {
+                            isCompressed = true;
+                            tally();
+                        }).on('error', function(err) {
+                            debug('Error while decoding %s', requestOptions.url);
+                            debug(err);
+                            callback(err);
+                        });
+
+                        res.on('data', function (data) {
+                            bodySize += data.length;
+                        }).pipe(brotli);
+
                         break;
                     default:
                         res.on('data', function (data) {