You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Express中禁用响应数据压缩?compression中间件不生效怎么解决

不生效的可能原因

  • 自定义filter函数缺少默认返回值:compression中间件要求filter回调明确返回布尔值来判断是否对当前请求执行压缩,你当前的实现仅在请求携带x-no-comprassion头时返回false,其余场景返回undefined,会被中间件判定为使用默认压缩规则,导致自定义禁用逻辑失效。
  • 请求头拼写不匹配:代码中判断的头名x-no-comprassion存在拼写错误,“压缩”的正确英文拼写为compression,如果客户端传递的是正确拼写的x-no-compression头,会和代码中的判断条件不匹配,无法触发禁用逻辑。
  • 中间件加载顺序错误:如果compression中间件的注册顺序在路由、静态资源服务等会返回响应的逻辑之后,请求还没走到压缩判断逻辑就已经返回结果,配置自然不会生效。
  • 上游代理层额外开启压缩:如果Node服务前部署了Nginx、CDN等反向代理服务,就算Node层已经禁用了压缩,代理层也可能默认开启gzip压缩,最终返回给客户端的响应依旧是压缩后的内容,没有Content-Length响应头。

修复代码

修改filter函数逻辑,补全默认返回值,同时修正请求头拼写:

const shouldCompress = (req, res) => {
    // 携带自定义头时直接不压缩
    if(req.headers['x-no-compression']) {
        return false
    }
    // 其余场景走compression默认的压缩判断逻辑
    return compression.filter(req, res)
}

app.use(compression({threshold: 5, filter: shouldCompress}))

修改后同时确认客户端请求携带的头名和代码中保持一致,检查compression中间件要注册在所有处理响应的逻辑之前,如有反向代理需要同步关闭代理层的自动gzip压缩配置。

内容的提问来源于stack exchange,提问作者Vladyslav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 06:24:04