Skip to content

Commit ebcb7a9

Browse files
committed
fix: 弹窗"响应头"数字反映真实总数(之前 pickHeaders 命中数为 0 时显示 0)
上一版只修了 popup 端读 state.result.headerCount,但 background 端 buildPopupResult 的 headerCount 算法本身有问题: const headers = data.main?.headers || {} return { ..., headerCount: Object.keys(headers).length } 而 data.main.headers 来自 buildHeaderRecord 里的 pickHeaders(normalizedHeaders, headerRules.interestingHeaders) —— 这个 pickHeaders 是按 interestingHeaders 白名单(server / x-powered-by / cf-ray / x-cache 等几十条)过滤的结果,目的是为业务挑选「有识别价值的响应头」。**响应头总数 ≠ picked 数量**:如果某站点没命中白名单里任何 header(比如自定义 header 都裁掉了 / 或是只走 HTTP/3 默认 header),picked 是空 {},弹窗就一直显示 0,与"主文档真的收到了 N 个响应头"的语义脱节。 buildHeaderRecord 在 record 里多存一个 headerCount: Object.keys(normalizedHeaders).length,这是响应头**总数**(normalize 后即 lowercased + 合并同名)。pickHeaders 仍然只挑白名单存进 record.headers 走业务,但 record.headerCount 反映完整数量。 buildPopupResult 改为:先看 main.headerCount 是不是有效数字,是就用它;否则回退到 Object.keys(main.headers || {}).length 兼容旧缓存。 插件版本升级到 1.1.1。
1 parent 9cbc1e5 commit ebcb7a9

3 files changed

Lines changed: 6 additions & 3 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "stackprism",
33
"private": true,
4-
"version": "1.1.0",
4+
"version": "1.1.1",
55
"type": "module",
66
"description": "StackPrism 用于检测网页前端、后端、CDN、SaaS、广告营销、统计、登录、支付、网站程序和主题模板线索。",
77
"scripts": {

src/background/headers.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ export const buildHeaderRecord = (details: any, headerRules: any, settings: any)
122122
statusCode: details.statusCode,
123123
time: Date.now(),
124124
headers,
125+
headerCount: Object.keys(normalizedHeaders).length,
125126
technologies: detectFromHeaders(normalizedHeaders, details.url, headerRules, settings)
126127
}
127128
}

src/background/popup-cache.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,9 @@ const buildDisplayTechnologies = (data: any, settings: any) => {
191191
const buildPopupResult = (data: any, settings: any, tab: any) => {
192192
const technologies = buildDisplayTechnologies(data, settings)
193193
const resources = mergeResourceSummary(data.page?.resources || {}, data.dynamic || {})
194-
const headers = data.main?.headers || {}
194+
const main = data.main || {}
195+
const headerCount =
196+
typeof main.headerCount === 'number' && main.headerCount >= 0 ? main.headerCount : Object.keys(main.headers || {}).length
195197
return {
196198
url: data.page?.url || data.dynamic?.url || tab?.url || '',
197199
title: data.page?.title || data.dynamic?.title || tab?.title || '',
@@ -201,7 +203,7 @@ const buildPopupResult = (data: any, settings: any, tab: any) => {
201203
counts: buildTechnologyCounts(technologies),
202204
categoryCounts: buildCategoryCounts(technologies),
203205
resources: { total: resources.total || 0 },
204-
headerCount: Object.keys(headers).length
206+
headerCount
205207
}
206208
}
207209

0 commit comments

Comments
 (0)