diff --git a/lib/requestHandler.js b/lib/requestHandler.js
index ecde92b..2480102 100644
--- a/lib/requestHandler.js
+++ b/lib/requestHandler.js
@@ -94,11 +94,29 @@ function fetchRemoteResponse(protocol, options, reqData, config) {
           } else {
             const serverResData = Buffer.concat(resDataChunks);
             const originContentLen = util.getByteSize(serverResData);
+            // remove gzip related header, and ungzip the content
+            // note there are other compression types like deflate
+            const contentEncoding = resHeader['content-encoding'] || resHeader['Content-Encoding'];
+            const ifServerGzipped = /gzip/i.test(contentEncoding);
+            const isServerDeflated = /deflate/i.test(contentEncoding);
+
+            /**
+             * when the content is unzipped, update the header content
+             */
+            const refactContentEncoding = () => {
+              if (contentEncoding) {
+                resHeader['x-anyproxy-origin-content-encoding'] = contentEncoding;
+                delete resHeader['content-encoding'];
+                delete resHeader['Content-Encoding'];
+              }
+            }
+
             // set origin content length into header
             resHeader['x-anyproxy-origin-content-length'] = originContentLen;
-
+            
             // only do unzip when there is res data
             if (ifServerGzipped && originContentLen) {
+              refactContentEncoding();
               zlib.gunzip(serverResData, (err, buff) => { // TODO test case to cover
                 if (err) {
                   rejectParsing(err);
@@ -107,6 +125,7 @@ function fetchRemoteResponse(protocol, options, reqData, config) {
                 }
               });
             } else if (isServerDeflated && originContentLen) {
+              refactContentEncoding();
               zlib.inflateRaw(serverResData, (err, buff) => { // TODO test case to cover
                 if (err) {
                   rejectParsing(err);
@@ -131,12 +150,6 @@ function fetchRemoteResponse(protocol, options, reqData, config) {
         });
       };
 
-      // remove gzip related header, and ungzip the content
-      // note there are other compression types like deflate
-      const contentEncoding = resHeader['content-encoding'] || resHeader['Content-Encoding'];
-      const ifServerGzipped = /gzip/i.test(contentEncoding);
-      const isServerDeflated = /deflate/i.test(contentEncoding);
-
       //deal response data
       res.on('data', (chunk) => {
         rawResChunks.push(chunk);
@@ -265,7 +278,6 @@ function getUserReqHandler(userRule, recorder) {
       const responseBody = responseInfo.body || '';
 
       const transferEncoding = resHeader['transfer-encoding'] || resHeader['Transfer-Encoding'] || '';
-      const contentEncoding = resHeader['content-encoding'] || resHeader['Content-Encoding'];
       const contentLength = resHeader['content-length'] || resHeader['Content-Length'];
       const connection = resHeader.Connection || resHeader.connection;
       if (contentLength) {
@@ -273,12 +285,6 @@ function getUserReqHandler(userRule, recorder) {
         delete resHeader['Content-Length'];
       }
 
-      if (contentEncoding) {
-        resHeader['x-anyproxy-origin-content-encoding'] = contentEncoding;
-        delete resHeader['content-encoding'];
-        delete resHeader['Content-Encoding'];
-      }
-
       // set proxy-connection
       if (connection) {
         resHeader['x-anyproxy-origin-connection'] = connection;