2
0
mirror of https://github.com/tenrok/axios.git synced 2026-06-14 18:42:33 +03:00

fix(http): add zlib headers if missing (#5497)

This commit is contained in:
ItsNotGoodName
2023-01-30 14:49:37 -08:00
committed by GitHub
parent 9915635c69
commit 65e8d1e28c
3 changed files with 43 additions and 2 deletions
+9
View File
@@ -19,6 +19,7 @@ import stream from 'stream';
import AxiosHeaders from '../core/AxiosHeaders.js';
import AxiosTransformStream from '../helpers/AxiosTransformStream.js';
import EventEmitter from 'events';
import ZlibHeaderTransformStream from '../helpers/ZlibHeaderTransformStream.js';
const zlibOptions = {
flush: zlib.constants.Z_SYNC_FLUSH,
@@ -425,7 +426,15 @@ export default isHttpAdapterSupported && function httpAdapter(config) {
case 'x-gzip':
case 'compress':
case 'x-compress':
// add the unzipper to the body stream processing pipeline
streams.push(zlib.createUnzip(zlibOptions));
// remove the content-encoding in order to not confuse downstream operations
delete res.headers['content-encoding'];
break;
case 'deflate':
streams.push(new ZlibHeaderTransformStream());
// add the unzipper to the body stream processing pipeline
streams.push(zlib.createUnzip(zlibOptions));
+28
View File
@@ -0,0 +1,28 @@
"use strict";
import stream from "stream";
class ZlibHeaderTransformStream extends stream.Transform {
__transform(chunk, encoding, callback) {
this.push(chunk);
callback();
}
_transform(chunk, encoding, callback) {
if (chunk.length !== 0) {
this._transform = this.__transform;
// Add Default Compression headers if no zlib headers are present
if (chunk[0] !== 120) { // Hex: 78
const header = Buffer.alloc(2);
header[0] = 120; // Hex: 78
header[1] = 156; // Hex: 9C
this.push(header, encoding);
}
}
this.__transform(chunk, encoding, callback);
}
}
export default ZlibHeaderTransformStream;