diff --git a/app/middleware/meta.js b/app/middleware/meta.js index 225194254f..519bcebe2e 100644 --- a/app/middleware/meta.js +++ b/app/middleware/meta.js @@ -4,7 +4,12 @@ 'use strict'; +const semver = require('semver'); + module.exports = options => { + // Node.js >=14.8.0 will set Keep-Alive Header, see https://github.com/nodejs/node/pull/34561 + const shouldPatchKeepAliveHeader = semver.lt(process.version, '14.8.0'); + return async function meta(ctx, next) { if (options.logging) { ctx.coreLogger.info('[meta] request started, host: %s, user-agent: %s', ctx.host, ctx.header['user-agent']); @@ -13,9 +18,9 @@ module.exports = options => { // total response time header ctx.set('x-readtime', Date.now() - ctx.starttime); - // try to support Keep-Alive Header + // try to support Keep-Alive Header when < 14.8.0 const server = ctx.app.server; - if (server && server.keepAliveTimeout && server.keepAliveTimeout >= 1000 && ctx.header.connection !== 'close') { + if (shouldPatchKeepAliveHeader && server && server.keepAliveTimeout && server.keepAliveTimeout >= 1000 && ctx.header.connection !== 'close') { /** * use Math.floor instead of parseInt. More: https://github.com/eggjs/egg/pull/2702 */ diff --git a/package.json b/package.json index 4dac95983f..57f0d2368b 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "ms": "^2.1.1", "mz": "^2.7.0", "on-finished": "^2.3.0", + "semver": "^7.3.2", "sendmessage": "^1.1.0", "urllib": "^2.33.0", "utility": "^1.15.0",