optimize: 优化 `responseReplace` 拦截器,允许替换多个同名响应头

pull/384/head
王良 2024-10-31 12:17:40 +08:00
parent a66af327c1
commit f7e5d58af1
1 changed files with 7 additions and 2 deletions

View File

@ -20,6 +20,7 @@ function replaceResponseHeaders (newHeaders, res, proxyRes) {
const preHeaders = {}
// 替换响应头
const needDeleteKeys = []
for (let i = 0; i < proxyRes.rawHeaders.length; i += 2) {
const headerKey = proxyRes.rawHeaders[i].toLowerCase()
@ -27,15 +28,19 @@ function replaceResponseHeaders (newHeaders, res, proxyRes) {
if (newHeaderValue) {
if (newHeaderValue !== proxyRes.rawHeaders[i + 1]) {
preHeaders[headerKey] = proxyRes.rawHeaders[i + 1] // 先保存原先响应头
if (newHeaderValue === REMOVE) { // 由于拦截配置中不允许配置null会被删所以配置一个[remove],当作删除响应头的意思
if (newHeaderValue === REMOVE) { // 由于拦截配置中不允许配置null会被删所以配置一个 "[remove]",当作删除响应头的意思
proxyRes.rawHeaders[i + 1] = ''
} else {
proxyRes.rawHeaders[i + 1] = newHeaderValue
}
}
delete newHeaders[headerKey]
needDeleteKeys.push(headerKey)
}
}
// 处理删除响应头
for (const headerKey of needDeleteKeys) {
delete newHeaders[headerKey]
}
// 新增响应头
for (const headerKey in newHeaders) {
const headerValue = newHeaders[headerKey]