Range请求回了200,里面却连全文的千分之一都不到
量法是同一个地址问五遍:普通GET、带压缩的Range、不带压缩的Range、只要末尾一百字节、一次要两段、以及一个不可能满足的越界范围,每一遍都记原始字节数而不只是状态码;再对同一批站的CSS与JS各问一遍做对照;最后在自己的nginx上把动态压缩、预压缩、不压缩三档摆开,逐个开关复现。
量法是同一个地址问五遍:普通GET、带压缩的Range、不带压缩的Range、只要末尾一百字节、一次要两段、以及一个不可能满足的越界范围,每一遍都记原始字节数而不只是状态码;再对同一批站的CSS与JS各问一遍做对照;最后在自己的nginx上把动态压缩、预压缩、不压缩三档摆开,逐个开关复现。
量法是三条基线并排:静态HTML按body节点数一遍、真浏览器按四个时刻各拍一次快照、再用同一个浏览器把它自己收到的原始文档存下来数第三遍。第三条基线是关键,没有它就分不清脚本造的元素和解析器还没走到的元素。
量法分两层:131个站的首页各抓两轮,流式记下首字节与末字节的时刻;再把112份文档按字节位置摊开,找第一个能被预扫描发现的资源引用落在第几位。两层各自成立,但坐标系不同,一层是压缩后的字节,一层是解压后的字符,中间不能互相换算。
做法是把每一条声明连同它所在的选择器一起抓出来,按类名前缀归到九类第三方去。密度一律折算成每千条声明,并且只算声明数超过200条的样式表——那11个零条站的样式表中位只有6KB,是碎片不是主干。
测法是三档请求头加一次定宽对照:先把每条地址的尺寸参数统一改成800,再用现代、只认WebP、两样都不认三种身份各要一次。尺子先自查——把通配符去掉重问一遍,那16个站16个照旧。
判据分三层:先看HTML里的nomodule属性,再看文件名里的polyfill与legacy,最后给每份下载到的产物算内容哈希。第三层撞出了意外——同一串哈希在十几个互不相识的品牌站上反复出现。
量法分三步:先把五类内联内容从HTML里挖出来称重,再用brotli和gzip各压一遍验证压缩会不会推翻结论,最后隔段时间重抓一次逐块比哈希。第二步的结果和直觉相反。
量法是三层:先从HTML抓地址逐条问文件大小,再用无头浏览器停60秒记实际传输,最后整套重跑一遍。三层给出三个数,而第三层才暴露出前两层都不是尺子。
做法是三条通道并用:URL路径里写着的版本、打包器留下的banner注释、库自己给版本变量赋的值。上全量之前先拿16份版本已知的官方文件验尺子,命中12份、读错0份,所以所有数字都是下限。
用RDAP协议逐个拉130个大牌域名的注册局记录,解析EPP状态位、到期事件、注册商归属与DNSSEC委派标记,再用DNS over HTTPS查DS记录两边对账;聚合服务限流掉的44个站,改从IANA引导表直连各注册局补齐。四把尺子中途改过,其中一把关系到整篇的分母。
先用公共解析器把131个海外站的SOA七个字段全部取下来,再直连各自的权威服务器复核,最后隔几秒重问一遍,剔掉那些每次都在变的动态读数。尺子中途改过三次,其中一次把已经写好的结论砍掉了一半还多。
取127个海外电商站首页的全部外链脚本,把每份文件里的块注释扒出来,先按写法筛出构建工具刻意保留的那批,再判断哪些真是许可声明;随后把webpack抽到旁边的36个LICENSE文件逐个访问。第一版判据太窄,把短格式的声明整批判成了非许可,修完结论方向就变了。
对131个海外电商站首页引用的JS与CSS逐个下载,在文件尾部搜sourceMappingURL声明,顺着声明拉map并解析;用正文首字节而不是状态码判真伪,剔掉单页应用的兜底首页和只有29字节的空壳map,最后把拿到的自有源码全文扫一遍工单链接、非生产域名与实验配置。五道尺子全部修过一遍。
逐台连上130个大牌域名的收信服务器25端口,EHLO看能力清单、STARTTLS握手取证书,再逐张比对主机名在不在SAN里;同时用DNS over HTTPS查MTA-STS声明与TLS-RPT回执地址,抓HTTPS上的策略文件做三处对账。四把尺子中途改过,其中两把改变了结论方向。
对同一个首页地址依次发GET、HEAD、OPTIONS,记录状态码、全部响应头、正文字节与耗时,再往下测一层内页、一个静态资源和robots.txt;被拦的站打乱顺序多轮重试,把分母从84做回124。五把尺子中途改过,其中ETag那把把41个站的结论砍成了2个。
用TLS握手逐站取下叶证书,解析SCT回执、SAN名单、策略标识与AIA扩展;再用DNS over HTTPS从待签发的名字逐级向上查CAA,遇到CNAME跟着跳过去,最后把事前授权与事后账本对账。四把尺子中途改过,其中三把改变了结论方向。
顺着131个海外电商站首页CSS里的@font-face把自托管字体逐个下载,用fontTools读name表与OS/2的fsType位,一律按站统计;再把字体里写着的176个许可与厂商地址跟随跳转逐个访问。三把尺子中途修过:图标字体判据误杀真排版字体,head日期是1904纪元的秒数,死链不跟跳转会把结论写反。
取131个海外电商站首页的原始HTML而不是渲染后的文档树,逐条抽出注释,先剔掉React与Vue流式渲染的水合标记,再按内容打十一类标签、一律按站统计;日期戳、工单号、应用块清单逐条回原文人工核对。中间修了两次判据,一次把排名整个颠倒,一次差点把巧合写成发现。
做法是每个站开一个全新的浏览器配置,访问首页等9秒,把三处存储连键带值读出来,再带着它回访一次做对照。尺子坏过两回:浏览器自带的用量接口根本不数这块地,报回来的中位是0字节;而第一版那条看起来严丝合缝的因果,把cookie和存储拆开重跑之后就散了。
做法是只抓首页一次,把结构化数据里的sameAs、页面上的社交链接和twitter:site三份一起取出来就地比对,先归一到平台粒度再逐个对账号,全程不去社交平台验活。平台判定表里一条写法把整个google.com都吞了进去,凭空造出八个站的Google+残留,修完只剩一个。