const isJSON = require("koa-is-json"); const zlib = require("zlib"); module.exports = (options) => { return async function gzip(ctx, next) { // 限制域名访问 added by steven @2023-07-11 const ipCheck = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; const host = ctx.request.host.indexOf(":") ? ctx.request.host.split(":")[0] : ctx.request.host; if (ipCheck.test(host)) { ctx.status = 200; ctx.body = `访问禁止只允许域名方式访问`; // ctx.throw(401, "只允许域名访问"); return; } ///// await next(); // 后续中间件执行完成后将响应体转换成 gzip let body = ctx.body; if (!body) return; // 支持 options.threshold if (options.threshold && ctx.length < options.threshold) return; if (isJSON(body)) body = JSON.stringify(body); // 设置 gzip body,修正响应头 const stream = zlib.createGzip(); stream.end(body); ctx.body = stream; ctx.set("Content-Encoding", "gzip"); }; };