bugfix: 修复 responseReplace.replaceResponseHeaders 方法,在与原响应头相等时,方法返回值不对的问题。

pull/303/head
王良 2024-04-21 21:25:03 +08:00
parent b0f6a9afaf
commit 120279c57f
2 changed files with 43 additions and 11 deletions

View File

@ -20,18 +20,19 @@ function replaceResponseHeaders (newHeaders, res, proxyRes) {
// 替换响应头
for (let i = 0; i < proxyRes.rawHeaders.length; i += 2) {
const headerKey = proxyRes.rawHeaders[i]
const headerKeyLower = headerKey.toLowerCase()
const headerKey = proxyRes.rawHeaders[i].toLowerCase()
const newHeaderValue = newHeaders[headerKeyLower]
if (newHeaderValue && newHeaderValue !== proxyRes.rawHeaders[i + 1]) {
preHeaders[headerKeyLower] = proxyRes.rawHeaders[i + 1] // 先保存原先响应头
if (newHeaderValue === REMOVE) { // 由于拦截配置中不允许配置null会被删所以配置一个[remove],当作删除响应头的意思
proxyRes.rawHeaders[i + 1] = ''
} else {
proxyRes.rawHeaders[i + 1] = newHeaderValue
const newHeaderValue = newHeaders[headerKey]
if (newHeaderValue) {
if (newHeaderValue !== proxyRes.rawHeaders[i + 1]) {
preHeaders[headerKey] = proxyRes.rawHeaders[i + 1] // 先保存原先响应头
if (newHeaderValue === REMOVE) { // 由于拦截配置中不允许配置null会被删所以配置一个[remove],当作删除响应头的意思
proxyRes.rawHeaders[i + 1] = ''
} else {
proxyRes.rawHeaders[i + 1] = newHeaderValue
}
}
delete newHeaders[headerKeyLower]
delete newHeaders[headerKey]
}
}
// 新增响应头
@ -54,7 +55,7 @@ function replaceResponseHeaders (newHeaders, res, proxyRes) {
module.exports = {
name: 'responseReplace',
priority: 201,
priority: 203,
replaceResponseHeaders,
responseIntercept (context, interceptOpt, req, res, proxyReq, proxyRes, ssl, next) {
const { rOptions, log } = context

View File

@ -0,0 +1,31 @@
const responseReplace = require('../../../../../src/lib/interceptor/impl/res/responseReplace')
const headers = {}
const res = {
setHeader: (key, value) => {
headers[key] = value
}
}
const proxyRes = {
rawHeaders: [
'Content-Type', 'application/json; charset=utf-8',
'Content-Length', '2',
'ETag', 'W/"2"',
'Date', 'Thu, 01 Jan 1970 00:00:00 GMT',
'Connection', 'keep-alive'
]
}
const newHeaders = {
'Content-Type': 'application/json; charset=utf-8',
'Content-Length': '3',
xxx: 1,
Date: '[remove]',
yyy: '[remove]'
}
const result = responseReplace.replaceResponseHeaders(newHeaders, res, proxyRes)
console.log(proxyRes.rawHeaders)
console.log(headers)
console.log(result)