x-powered-by 实测 27 个首页:只有 5 个在发,但 25 个都说出了自己的栈
x-powered-by 在 2026-09-03 抓取的 27 个首页里只有 5 个发,但把它、Server 头和 generator 标签一起数,27 个里 25 个说出了厂商或框架,6 个连版本号一起说了。整个面板上最安静的那个站,把 CMS 写在了 speculation rules 脚本里。

实测 · 2026-09-03 · 27 个首页 · 每站一次请求 · 响应头与 HTML 里的技术栈自曝
样本 / 口径:2026-09-03 当天对 30 个首页各发一次 GET,桌面 Chrome UA,跟随跳转,不执行 JavaScript,出口在日本大阪。stackoverflow.com、medium.com、www.reddit.com 三个站返回 403,剔除后纳入 27 个。
27 个首页里只有 5 个发 x-powered-by。真正要紧的不是这个数:把一个站能说出自己技术栈的三个地方一起数 —— 这个头、Server 头、<meta name="generator"> —— 27 个里有 25 个说出了厂商或框架,6 个连版本号或构建号一起说了。读完这些只需要一次不带任何凭证的 GET。
怎么测的
每个站一次 GET,用桌面 Chrome UA 而不是 Googlebot,跟随跳转。这一轮 27 个站一共回了 581 个响应头,平均每站 21.5 个。从每份响应里读 X-Powered-By 与 Server,再用正则从投递 HTML 里取 <meta name="generator">。
# 在你自己的页面上读同样三处
curl -sI -A 'Mozilla/5.0' https://example.com/ | grep -iE '^(server|x-powered-by)'
curl -sL -A 'Mozilla/5.0' https://example.com/ | grep -io '<meta[^>]*generator[^>]*>'
三条局限。首页只是一条路径,源站在 CDN 没缓存的路径上完全可能回得不一样。我们只读了这些值,没有拿它们去做任何事,这些值本身也都不是漏洞。还有,这 27 个都是有专职前端团队的大站,它描述的是这一层,不是全网。
x-powered-by 在这 27 个站上都写了什么
5 个站,其中 3 个写的是同一个框架。
| 站点 | 值 |
|---|---|
| techcrunch.com | WordPress VIP <https://wpvip.com> |
| vercel.com | Next.js, Payload |
| www.notion.com | Next.js |
| www.theverge.com | Next.js |
| substack.com | Express |
MDN 对这个头的定性很直接:「The HTTP X-Powered-By response header is a non-standard header for identifying the application or framework that generated the response」,以及「Not part of any current specification」(X-Powered-By,2026-09-03 访问)。5 个值里没有一个带版本号。vercel.com 是唯一一次说出两样东西的:一个框架,加一个内容后端。
说得最多的其实是 Server 头
27 个站里 23 个发 Server。其中 7 个写 cloudflare,4 个写 Vercel,3 个写 nginx,剩下 9 个各不相同:Google Frontend、github.com、railway-hikari、Apache、BBC-GTM、Framer/cc760a6、Netlify、envoy、ATS/9.2.15。
完全不发 Server 的有 4 个:webflow.com、www.theverge.com、www.figma.com、arstechnica.com。这 4 个里有 2 个换了个地方把自己说了出来 —— 这正是这次普查反复撞到的形态。
| 声明面 | 站数 | 带版本 |
|---|---|---|
Server 头 | 23 / 27 | 2 |
<meta name="generator"> | 6 / 27 | 5 |
X-Powered-By 头 | 5 / 27 | 0 |
| 三处都没有 | 2 / 27 | — |
generator 标签是三处里最少见的,也是最具体的。6 个站发它,其中 5 个带版本或构建串:Framer b1d1ca8、www.netlify.com 的 Astro v5.18.2、techcrunch.com 的 WordPress 6.9.7、www.cloudflare.com 的 Astro v6.3.7、astro.build 的 Astro v7.2.9。只有 webflow.com 写了个光秃秃的产品名。
其中三个是同一个框架的三个大版本,不用登录就能从外面读出来:Netlify 停在 5,Cloudflare 在 6,Astro 自己的站在 7。
整个面板上最安静的那个站,还是把 CMS 说了出来
把范围放宽到一组基础设施头 —— Server、Via、X-Served-By、X-Powered-By 这些 —— 一个都不发的只有两个站:webflow.com 和 arstechnica.com。而 webflow.com 转头就在 HTML 里写了 <meta name="generator" content="Webflow">,它的安静只维持到响应头结束为止。
于是只剩 arstechnica.com 一个:头里没有,generator 标签也没有。它说得比前面两个都多,只是说在了别处。它那段 speculation rules 脚本 —— 就是 speculation rules 实测 27 个首页 那篇量的东西 —— 排除了 /wp/wp-*.php、/wp-content/plugins/* 和 /wp-content/themes/ars-v9/* 三类路径。这一行同时说出了 CMS、插件目录,和主题在项目里的名字,而它藏在一个没人会当成自曝面的性能特性里。
删掉一个头不等于把技术栈藏起来,只是把证据挪到了一个没人审的文件里。
这对你意味着什么
这些都不改变你被怎么抓取、怎么排名。这份测量里没有任何排名数据,MDN 和 Google 的抓取文档也都没把这些头和搜索连起来。它改变的只有一件事:一个陌生人要多久才能把你的部署描述清楚。
- 做决定之前先把自己的三处读一遍。上面两条命令不到一分钟,多数人意外的不是那个头,是 generator 标签。
- 先删版本号,再考虑删名字。
Astro告诉别人你用什么建站,Astro v5.18.2告诉别人该去翻哪一批公告。 - 去看那些不是响应头的地方。构建产物清单、报错页、订阅源生成器,还有上面那段规则块,泄露的名字是任何一份头部策略都碰不到的。
如果这些值是平台替你定的、后台里根本没有开关,那种约束写在 建站平台不让你改的那些 SEO 设置;同一批面板里另一个各站口径不一的头,量在 CDN 缓存状态实测 27 个首页。想看自己的页面在一次普通请求下回了哪些头、投递了什么 HTML,可以 看看 QueryWin 是怎么读一个页面的。
常见问题
你们是怎么测的
2026-09-03 当天,30 个首页各发一次 GET,桌面 Chrome UA,跟随跳转,581 个响应头全部落盘并转小写。generator 标签用正则从投递 HTML 里取。全程不执行 JavaScript,出口在日本大阪。
x-powered-by 要不要删掉
删掉的成本是零,留着的收益也是零 —— 它不属于任何现行规范,没有客户端依赖它。删了对你有没有用,取决于还有几个地方在说同一个框架,所以顺序是先把三处读一遍,再决定删哪个。
这些会影响 SEO 吗
这份数据说明不了。我们没有采集任何排名信息,这些头也不是抓取指令。一个把它们全删光的站,排名和删之前一样。
暴露框架算不算安全问题
不知道,这次的测量答不了这个问题。我们没有对任何目标做过测试。能站得住的说法要窄得多:版本串缩短了从读一个页面到知道该查哪批公告之间的距离。
为什么要把 generator 标签和响应头一起数
因为不发 Server 头的 4 个站里,有 2 个照样说了自己是什么 —— webflow.com 说在 HTML 里,www.theverge.com 说在另一个头里。一次只数一个面,会把本来不安静的站数成安静的。


