如何让PageSpeed Insights正常访问带HTTP Basic Authentication的站点
PageSpeed Insights访问带HTTP Basic Authentication站点的报错修复
你当前写法失效的核心原因
- 你采用的
https://username:password@www.example.com格式的嵌凭证写法,在Lighthouse运行的Chromium环境中早已被安全策略禁用。从Chrome 90版本开始,浏览器会自动剥离所有导航请求URL中携带的Basic Auth信息,甚至直接拦截这类请求返回访问拒绝,根本不会携带凭证发起认证流程。哪怕同样的URL在curl命令下可以正常返回页面内容,在Chrome的页面加载规则里就是完全无效的,这就是你遇到net::ERR_ACCESS_DENIED报错的本质。 - PageSpeed Insights的云端网关出于安全防护要求,会主动检测并清除请求链路中携带的明文凭据,你嵌在目标URL里的账号密码,在PSI把测试任务转发给Lighthouse之前就会被过滤掉,根本走不到实际的认证校验环节。
可落地的解决方法
- 通过原生支持的自定义请求头传递认证信息
Lighthouse的配置体系本身支持透传自定义请求头,PageSpeed Insights v5接口也开放了对应的_headers参数入口。你只需要把Basic Auth的凭证放到标准的Authorization请求头里传递,就能完全绕开Chrome对URL嵌凭证的限制,也不会被云端网关的安全规则过滤。
具体调用格式参考:
https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=https://www.example.com&_headers={"Authorization":"Basic 经Base64编码的 用户名:密码 字符串"}
这里的Base64编码字符串和curl命令里-u参数自动生成的认证头内容完全一致,不需要额外调整格式。
- 配置服务端IP白名单
在站点的HTTP Basic Auth规则中,将PageSpeed Insights测试服务的固定出口IP段加入免认证白名单,来自测试服务的请求会直接跳过Basic Auth校验,无需额外传递凭证即可正常加载页面。 - 临时放开认证完成快速测试
如果只是单次生成性能报告的临时需求,可以在测试的短暂时段内关闭站点的Basic Auth防护,等报告生成后立刻恢复认证配置,注意不要长期开放无防护的站点访问。 - 本地Lighthouse测试替代
针对内网或者权限管控严格的站点,可以直接在本地运行Lighthouse CLI工具完成测试。本地运行时不会有云端网关的过滤规则限制,你可以自由配置请求头、模拟受限网络环境下的页面加载场景,完全不需要依赖线上的云端测试服务。
注意:不要再尝试把账号密码拼接到目标站点的URL路径里传递,这个写法从浏览器安全规则层面就已经失效,不管怎么调整拼接格式都无法正常通过认证。
内容的提问来源于stack exchange,提问作者Nagarajan Malaichamy
相关产品推荐
相关产品推荐

