我的HTTP请求包含{' content-encoding':" gzip"}标头。我正在尝试使用node.js读取数据。我使用下面的代码来解压缩数据。但我得到错误:在Zlib._handle.onerror(zlib.js:355:17)错误的标题检查错误:-3,代码:' Z_DATA_ERROR'。有人可以帮我吗纠正这个错误。
var myHttp = require("http");
var url = require("url");
var qString = require("querystring");
var fs = require('fs');
var zlib = require('zlib');
var myEvents = require('./customEvents');
var myAppWebServer = myHttp.createServer(function(request, response){
response.setHeader('Access-Control-Allow-Origin', 'http://localhost:8080');
response.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
response.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
response.setHeader('Access-Control-Allow-Credentials', true);
response.setHeader('content-type', 'application/json');
var body = "";
request.on('data', function (chunk) {
body += chunk;
});
request.on('end', function () {
if(body){
function getGzipped(url, callback) {
var buffer = [];
myHttp.get(url, function(response) {
var gunzip = zlib.createGunzip();
response.pipe(gunzip);
gunzip.on('data', function(data) {
buffer.push(data.toString());
}).on("end", function() {
callback(null, buffer.join(""));
}).on("error", function(e) {
callback(e);
})
}).on('error', function(e) {
callback(e)
});
}
getGzipped(url, function(err, data) {
console.log(err);
});
}
});
response.end('{ "links" :"http://localhost:8080/users" }');
});
myAppWebServer.listen(8080);
答案 0 :(得分:1)
“Content-Encoding”标头用于响应。在请求中,它应该是“Accept-Encoding”标头。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
答案 1 :(得分:0)
我在尝试从客户端POST时遇到了相同的错误。如果发件人在数据缓冲区上使用zlib,则编码和标头将为“ zlib”而不是“ gzip”。
我将“内容编码”从“ gzip”更改为“放气”(也称为zlib;有关详细信息,请参见https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding)。
服务器开始接受我的POST。因此,您的问题可能出在发送端,而不是解码上。
答案 2 :(得分:0)
我使用 Axios 通过代理发送请求。添加
<块引用>'接受编码':'zlib'
在我的请求中解决了这个问题。