bugfix: 修复 responseReplace.replaceResponseHeaders 方法,在与原响应头相等时,方法返回值不对的问题。
parent
b0f6a9afaf
commit
120279c57f
|
@ -20,18 +20,19 @@ function replaceResponseHeaders (newHeaders, res, proxyRes) {
|
||||||
|
|
||||||
// 替换响应头
|
// 替换响应头
|
||||||
for (let i = 0; i < proxyRes.rawHeaders.length; i += 2) {
|
for (let i = 0; i < proxyRes.rawHeaders.length; i += 2) {
|
||||||
const headerKey = proxyRes.rawHeaders[i]
|
const headerKey = proxyRes.rawHeaders[i].toLowerCase()
|
||||||
const headerKeyLower = headerKey.toLowerCase()
|
|
||||||
|
|
||||||
const newHeaderValue = newHeaders[headerKeyLower]
|
const newHeaderValue = newHeaders[headerKey]
|
||||||
if (newHeaderValue && newHeaderValue !== proxyRes.rawHeaders[i + 1]) {
|
if (newHeaderValue) {
|
||||||
preHeaders[headerKeyLower] = proxyRes.rawHeaders[i + 1] // 先保存原先响应头
|
if (newHeaderValue !== proxyRes.rawHeaders[i + 1]) {
|
||||||
if (newHeaderValue === REMOVE) { // 由于拦截配置中不允许配置null,会被删,所以配置一个[remove],当作删除响应头的意思
|
preHeaders[headerKey] = proxyRes.rawHeaders[i + 1] // 先保存原先响应头
|
||||||
proxyRes.rawHeaders[i + 1] = ''
|
if (newHeaderValue === REMOVE) { // 由于拦截配置中不允许配置null,会被删,所以配置一个[remove],当作删除响应头的意思
|
||||||
} else {
|
proxyRes.rawHeaders[i + 1] = ''
|
||||||
proxyRes.rawHeaders[i + 1] = newHeaderValue
|
} else {
|
||||||
|
proxyRes.rawHeaders[i + 1] = newHeaderValue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
delete newHeaders[headerKeyLower]
|
delete newHeaders[headerKey]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 新增响应头
|
// 新增响应头
|
||||||
|
@ -54,7 +55,7 @@ function replaceResponseHeaders (newHeaders, res, proxyRes) {
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
name: 'responseReplace',
|
name: 'responseReplace',
|
||||||
priority: 201,
|
priority: 203,
|
||||||
replaceResponseHeaders,
|
replaceResponseHeaders,
|
||||||
responseIntercept (context, interceptOpt, req, res, proxyReq, proxyRes, ssl, next) {
|
responseIntercept (context, interceptOpt, req, res, proxyReq, proxyRes, ssl, next) {
|
||||||
const { rOptions, log } = context
|
const { rOptions, log } = context
|
||||||
|
|
|
@ -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)
|
Loading…
Reference in New Issue