KOA-压缩不工作

问题描述:

这是我的嵌入KOA-压缩中间件KOA-压缩不工作

app.use(compress({ 
    filter: function (content_type) { 
     return /text/i.test(content_type) 
    }, 
    threshold: 1, 
    flush: require('zlib').Z_SYNC_FLUSH 
})) 

而以下是我的响应发送代码

ctx.body = 'Hello world' 
ctx.compress = true 
ctx.set('Content-Type', 'text/plain') 
ctx.set('content-encoding', 'gzip') 

代码时,我通过卷曲打网址我得到一个简单的纯文本说“你好世界”,但我相信我应该有我得到了一个压缩的字符串,因为CURL默认不做解压缩。当我在ChromeBrowser上点击相同的URL时,出现如下错误:ERR_CONTENT_DECODING_FAILED

当我将内容编码设置为gzip时,koa-compress应该压缩了我的响应文本,但它不知道怎么做。也许我犯了一些错误,但我不知道是什么?

我刚刚重新测试了整个过程,我意识到我的代码不工作,因为我手动设置了content-encoding,我不应该设置它,它应该由压缩中间件本身设置。我在错误,假设,应始终压缩响应。但是我现在意识到,经过大量研究,只有当客户端发送一个包含Accept-Encoding的标头时,压缩才有效。如果支持的Accept-Encoding为gzip,则响应将以gzip压缩,如果它是deflate,则响应将以deflate的形式进行压缩,如果没有提及,则响应应该是简单的明文数据。我被接收以卷曲普通文本,因为卷曲并不在其默认请求发送Accept-Encoding,但使用下面的代码

curl -H 'Accept-Encoding: gzip' -D - http://localhost:3000 

然后我接收压缩形式的响应,当我发送卷曲请求。所以我的代码一直在努力。只是,我不应已设置

ctx.set('content-encoding', 'gzip')

如果content-encoding设置,模块将无法运行并产生错误 所以我们没有明确设置内容编码的,应当设置通过压缩中间件取决于请求的Accept-Encoding

所以正确的代码,以响应应该像下面


ctx.body = 'Hello world' 
ctx.compress = true 
ctx.set('Content-Type', 'text/plain')